私は現在、添付プロパティを使用して TreeView のドラッグ アンド ドロップの実装に取り組んでいます。簡単に言えば、添付プロパティを使用してドラッグ アンド ドロップを有効/無効にしたいと考えています。私はすべてを機能させることができましたが、本当に奇妙な問題に直面しています。TreeView.DragOver イベントを監視して、ツリー内のどこに新しいアイテムを挿入するかを決定しています。私の問題は、TreeViewItem のコンテンツ (つまり、border または textBlock) の右側にドラッグすると、DragOver イベントが生成されますが、DragEventArgs.OriginalSource プロパティが TreeView コントロールの Grid 要素に設定されることです。Grid または 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 が機能しないかどうかを判断しようとしました。
したがって、基本的には、アイテムのコンテンツをホストする領域だけでなく、TreeViewItem の右側全体をドラッグ アンド ドロップのドロップ ゾーンとして使用することを検討しています。誰か提案はありますか?