5

WPFアプリケーションにTreeViewとがあります。CanvasユーザーがTreeViewItemをドラッグできる機能を実装しようとしています。ユーザーがキャンバスにドロップしたときにメソッドを呼び出し、TreeViewItemヘッダーをパラメーターとしてこのメ​​ソッドに渡します。

これは私がこれまでに行ったことです:

private void TreeViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
     if (e.Source.GetType().Name.Equals("TreeViewItem"))
     {
         TreeViewItem item = (TreeViewItem)e.Source;

         if (item != null)
         {
              DataObject dataObject = new DataObject();
              dataObject.SetData(DataFormats.StringFormat, item.Header.ToString());
              DragDrop.DoDragDrop(item, dataObject, DragDropEffects.Copy);
         }
     }
 }

キャンバスにドラッグアンドドロップしても何も起こりません。したがって、私は次に何をすべきかわからない。本当に小さい気がしますが、途方に暮れています。メソッドを呼び出して、ヘッダーが削除されたことを検出するにはどうすればよいですか?

何か案は?

4

1 に答える 1

6

AllowDropターゲット要素でtrueに設定してから、ターゲット要素DragOverDropイベントを処理する必要があります。

例:

    private void myElement_DragOver(object sender, DragEventArgs e)
    {
        if (!e.Data.GetDataPresent(typeof(MyDataType)))
        {
            e.Effects = DragDropEffects.None;
            e.Handled = true;
        }
    }

    private void myElement_Drop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(MyDataType)))
        {
            // do whatever you want do with the dropped element
            MyDataType droppedThingie = e.Data.GetData(typeof(MyDataType)) as MyDataType;
        }
    }
于 2012-10-18T20:25:28.540 に答える