Я позиционирую элементы из коллекции на холсте, используя 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, а не к сетке, на которой я рисую.
Возможно, я пропускаю что-то очевидное здесь.Буду благодарен за любую подсказку.