【发布时间】:2012-01-10 18:27:16
【问题描述】:
我使用 ItemsControl 将集合中的项目放置在画布上。定位由 TranslateTransform 完成:<TranslateTransform X="{Binding x}" Y="{Binding y}"/>。为了使项目可点击,我在项目上实现了 MouseLeftButtonUp 事件。
查看下面的完整代码:
<ItemsControl ItemsSource="{Binding XYPoints}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Width="20" Height="20" Fill="Red" MouseLeftButtonUp="XYPlotPoint_MouseLeftButtonUp">
<Ellipse.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0"/>
<TranslateTransform X="{Binding x}" Y="{Binding y}"/>
</TransformGroup>
</Ellipse.RenderTransform>
</Ellipse >
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我想不通的是:我希望能够单击我的任何项目并获取 TranslateTransform 坐标,即用于在画布上定位元素的 x 和 y 值。
我的想法是在将发送者转换回椭圆后从事件的发送者那里得到这个,例如Ellipse myEllipse = (Ellipse)sender; 但我没有看到任何包含该信息的属性。
如果我使用GeneralTransform gt = myEllipse.TransformToVisual(Application.Current.RootVisual);,它只会给我相对于 RootVisual 的变换,而不是相对于我正在绘制的网格。
也许我在这里忽略了一些明显的东西。如有任何提示,我将不胜感激。
【问题讨论】:
-
您想找到翻译转换的 x 和 y 值。那些不是从您的 DataContext 绑定的吗?只需获取 DataContext 并检查 x 和 y 值。
-
谢谢乔希,我该怎么做?在我拥有
DataContext之后,这是一个ObservableCollection,例如,一千个具有 x 和 y 位置值的项目,我怎么知道哪个项目对应于我刚刚单击的项目? -
我找到了另一个解决问题的方法,见下文。如果你描述的方式也是可能的,乔希,我想了解更多。
标签: silverlight position mouseevent transform itemscontrol