我正在两个树视图之间进行拖放操作。 在目标树视图(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。
答案 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();
}