在拖动期间获取treeviewitem;两个树视图之间的操作

时间:2015-01-21 09:44:35

标签: c# .net wpf treeview

我正在两个树视图之间进行拖放操作。 在目标树视图(Drop Treeview)中,使用系统中的驱动器和文件填充此树视图。 如何获取我想在目标树视图中删除拖动项目的treeviewitem? 我在目标树视图的drop事件中使用以下代码

    private void TargetTreeview_Drop(object sender, DragEventArgs e)
    {
        Node item = e.Data.GetData(typeof(Node)) as Node;
        e.Effects = DragDropEffects.Copy;
        Point Start = e.GetPosition(TargetTreeview_Drop);
        HitTestResult result = VisualTreeHelper.HitTest(TargetTreeview_Drop, Start);
        if (result != null)
        {
            if (result.VisualHit is FrameworkElement)
            {
                FrameworkElement Target = result.VisualHit as FrameworkElement;
                object data = Target.DataContext;
            }
        }


    }

在上面的代码中,我无法将对象“data”转换为treeviewitem。 如果我将“data”转换为treeviewitem意味着它是“null”。

任何人都可以帮助我获取我想要删除拖动项目的目标treeviewitem。

2 个答案:

答案 0 :(得分:0)

我会这样做不同,首先在第一个树视图中我会有一个Click或MouseCliCk事件处理程序并保存点击全局变量

TreeNode tn = null;
treeView1.Click += (s,e)=>{
    tn=e.Node;
};

在第二个树视图中,我会在drop事件中有这样的事情(不知道drop事件的正确语法,但你会得到这个想法)

treeView2.Drop += (s,e) =>{

    if(tn!=null){

         treeView2.Nodes.Add(tn.Clone());
         //or whatever you want to do
    }
};

希望很清楚

答案 1 :(得分:0)

尝试将发送方对象转换为TreeView,然后使用TreeView的SelectedItem。如果它是一个TreeViewItem,那么就这样投射它。

    var tree = sender as TreeView;

    // ... Determine type of SelectedItem.
    if (tree.SelectedItem is TreeViewItem)
    {
        // ... Handle a TreeViewItem.
        var item = tree.SelectedItem as TreeViewItem;
        this.Title = "Selected header: " + item.Header.ToString();
    }
    else if (tree.SelectedItem is string)
    {
        // ... Handle a string.
        this.Title = "Selected: " + tree.SelectedItem.ToString();
    }