我目前正在使用附加的屬性來處理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