2

Location という Point プロパティを持つノード クラスがあります。このクラスのオブジェクトをいくつか作成し、それらを汎用リストに入れます。私のアプリでは、すべてのノードがイメージで表されます (ノードの場所 == イメージの場所)。

イメージをレンダリングするには、ノードリストを反復処理し、WPF メイン ウィンドウの Canvas にイメージを追加します。基本的に、リストの最初の項目は Canvas の最初の子です。

ノードの場所を変更すると、イメージをレンダリングすると自動的に変更されます。しかし、MouseMove イベントを使用して Image を移動したい場合、ノードリストから特定の要素にアクセスする方法がわかりません。どの要素がどれであるかをどのように知ることができますか?

4

2 に答える 2

2

ノードリストのノードと同じ順序でイメージをキャンバスに追加するため、単純にキャンバスの子インデックスを取得し、そのインデックスでノードにアクセスできます。

private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var element = canvas.InputHitTest(e.GetPosition(canvas)) as UIElement;

    if (element != null)
    {
        int index = canvas.Children.IndexOf(element);
        node hitNode = nodelist[index];
    }
}
于 2013-10-19T20:59:19.293 に答える
1

マウスで特定の画像をクリック/ドラッグ/ホバーし、その (0,0) ポイントをキャンバスに対して変換します。

Point relativePoint = image.TransformToAncestor(myCanvas)
                              .Transform(new Point(0, 0));

次に、リストを実行して、relativePoint と同じ場所にある画像を見つけます。

それが、マウスカーソルをキャプチャしたものを見つける方法です。

また、これは wpf での変換について読むのに最適な投稿です。

http://msdn.microsoft.com/en-us/library/ms750596.aspx

于 2013-10-19T18:53:29.077 に答える