ItemsControlを使用してキャンバス上のコレクションのアイテムを配置します。配置はTranslateTransform:<TranslateTransform X="{Binding x}" Y="{Binding y}"/>
によって行われます。アイテムをクリック可能にするために、アイテムにMouseLeftButtonUpイベントを実装しました。ItemsControlアイテムをキャンバスに配置した後、Transform(Silverlight 5)を取得します。
以下の完全なコードを参照してください:そのxとyの値、すなわち、私は私の項目のいずれかをクリックしてTranslateTransformの座標を取得できるようにしたい:これで私が把握することはできませんどのような
<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>
を要素をキャンバス上に配置するために使用されました。
私の考えは、送信者をEllipseにキャストした後、イベントの送信者から取得することでした。 Ellipse myEllipse = (Ellipse)sender;
しかし、情報を含むプロパティは表示されません。
私がGeneralTransform gt = myEllipse.TransformToVisual(Application.Current.RootVisual);
を使用している場合は、私が描画しているグリッドではなく、RootVisualを基準にしたTransformのみが表示されます。
おそらく私はここで明白な何かを見落としているでしょう。私はどんなヒントにも感謝しています。
あなたは、xを見つけたいとあなたの翻訳変換のy値。あなたのDataContextからバインドされていませんか? DataContextを取得し、xとyの値を調べてください。 –
ありがとうジョシュ、どうすればいい?そして、私は 'DataContext'(xとyの位置値を持つ1000個のアイテム)の' ObservableCollection'を取得した後、どのアイテムがちょうどクリックされたアイテムに対応しているかをどのように知ることができますか? – Phasma
私はこの問題を解決する別の方法を見つけました。下記を参照してください。あなたが描写する方法も可能な場合、ジョシュ、私はそれについてもっと聞きたいと思います。 – Phasma