Я размещаю элементы из коллекции на холсте с помощью элемента ItemsControl. Позиционирование выполняется с помощью TranslateTransform: <TranslateTransform X="{Binding x}" Y="{Binding y}"/>
. Чтобы сделать элементы доступными, я реализовал событие MouseLeftButtonUp для элементов.После размещения элемента ItemsControl на холсте получить его Transform (Silverlight 5)
Смотреть полный код ниже:
<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, то есть х и у значений, которые были использованы для позиционирования элемента на холсте.
Моя идея состояла в том, чтобы получить это от отправителя события после отбрасывания отправителя обратно на эллипс, например. Ellipse myEllipse = (Ellipse)sender;
, но я не вижу никаких свойств, содержащих эту информацию.
Если я использую GeneralTransform gt = myEllipse.TransformToVisual(Application.Current.RootVisual);
, он дает мне Трансформирование относительно RootVisual, а не к сетке, на которой я опишу.
Возможно, я не замечаю здесь ничего очевидного. Я был бы благодарен за любой намек.
Вы хотите найти й и y вашего переводного преобразования. Не связаны ли эти данные с DataContext? Просто получите DataContext и проверьте значения x и y. –
Спасибо, Джош, как бы я это сделал? И после того, как у меня есть «DataContext», который является «ObservableCollection», скажем, тысячей элементов с значениями позиции x и y, как я узнаю, какой элемент соответствует тому, который я только что нажал? – Phasma
Я нашел другое решение проблемы, см. Ниже. Если также возможно, как вы это описываете, Джош, я бы хотел больше узнать об этом. – Phasma