2015-01-21 56 views
0

我正在做两个树视图之间的拖放操作。 在目标树视图(Drop Treeview)中,使用系统中的驱动器和文件填充此树视图。 我怎样才能得到treeviewitem我想放下目标treeview中拖动的项目? 我在目标树状在两个树视图之间拖放操作期间获取treeviewitem

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意味着它是“null”。

任何人都可以帮助我得到目标treeviewitem我想拖放被拖动的项目。

回答

0

我会做这个difrently,第一关第一树状我想有一个点击或者鼠标点击事件处理程序,并保存在一个全局变量

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

是点击并在第二树视图我将不得不在降事件是这样的(不知道正确的语法来回drop事件,但你会得到的想法)

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

    if(tn!=null){ 

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

希望很清楚

+0

Hai Vajura wpf.TreeNode中没有TreeNode类,Winforms中存在类。我在wpf TreeViewItem中询问。 – ANJi 2015-01-21 10:00:56

0

尝试CA将发件人对象作为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(); 
    } 
相关问题