C# TreeViewItem拖放操作不会';不要提起DragOver事件

C# TreeViewItem拖放操作不会';不要提起DragOver事件,c#,wpf,treeview,treeviewitem,C#,Wpf,Treeview,Treeviewitem,我目前正在使用附加属性为TreeView实现拖放。长话短说,我想使用附加属性来启用/禁用拖放。我已经设法使一切正常,我遇到了一个非常奇怪的问题。我正在监视TreeView.DragOver事件,以确定在树中插入新项的位置。我的问题是,当我拖动到TreeView项目内容(即border或textBlock)的右侧时,会生成DragOver事件,但DragEventArgs.OriginalSource属性设置为TreeView控件的网格元素。网格或TreeViewItem不应该生成事件吗 以下是一

我目前正在使用附加属性为TreeView实现拖放。长话短说,我想使用附加属性来启用/禁用拖放。我已经设法使一切正常,我遇到了一个非常奇怪的问题。我正在监视TreeView.DragOver事件,以确定在树中插入新项的位置。我的问题是,当我拖动到TreeView项目内容(即border或textBlock)的右侧时,会生成DragOver事件,但DragEventArgs.OriginalSource属性设置为TreeView控件的网格元素。网格或TreeViewItem不应该生成事件吗

以下是一段与事件相关的代码片段:

/// 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的整个右侧作为拖放区域,而不仅仅是承载项目内容的区域。有人有什么建议吗

ItemDrag:此事件从源TreeView控件引发,如下所示 一旦用户开始拖动树节点。发生这种情况时,请致电 用于启动拖放过程的DoDragDrop方法


因此,在引发其他事件之前,您还需要为ItemDrag和call DoDragDrop添加一个事件处理程序。

如果我不清楚,很抱歉,我省略了启动DoDragDrop调用的部分。基本上,我在“…”中使用MouseMove和MouseLeftButtonDown来启动拖动。基本上,拖放可以正常工作,但如果我将鼠标悬停在TreeView项的右侧,则所有TreeView项上的HitTest都会失败,事件将从TreeView中的最低级别网格引发。