我目前正在使用附加的属性来处理TreeView的拖放操作。长话短说我想使用附加属性来启用/禁用拖放操作。我设法让所有的东西都能正常工作,而且我遇到了一个非常奇怪的问题。我正在监视TreeView.DragOver事件,以确定我要插入新项目的树中的哪个位置。我的问题是,当我拖动到TreeViewItem的内容(I.e border或textBlock)的右侧时,将生成DragOver事件,但将DragEventArgs.OriginalSource属性设置为TreeView控件的Grid元素。 Grid或TreeViewItem不应该生成一个事件吗?TreeViewItem拖放不会引发DragOver事件
以下是剪掉它的代码是关系到事件:
/// Property Changed callback when you set DragDrop attached property
private static void OnDragDropPropertyChanged_(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
TreeView control = (TreeView)obj;
if ((bool)args.NewValue == true)
{
control.AllowDrop = true;
...
control.DragEnter += OnTreeViewDragEnter_;
control.DragLeave += OnTreeViewDragLeave_;
control.DragOver += OnTreeViewDragOver_;
control.Drop += OnTreeViewDrop_;
}
}
我也试着使用的HitTest确定哪个树型视图鼠标位于其上,因为的DragDrop不起作用似乎停止所有鼠标事件。
所以基本上我正在寻找使用TreeViewItem的整个右侧作为拖放的拖放区域,而不仅仅是托管项目内容的区域。有没有人有什么建议?
对不起,如果我不清楚,但我已经省略了我发起DoDragDrop调用的部分。基本上我在“...”中使用MouseMove和MouseLeftButtonDown来启动拖动。基本上拖放工作正常,但如果我将鼠标悬停在TreeViewItem的右侧,HitTest将在所有TreeViewItems上失败,并从TreeView中的最低级别网格中引发事件。 – Etienne 2012-04-20 18:02:19