1

私は現在、添付プロパティを使用して 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 の右側全体をドラッグ アンド ドロップのドロップ ゾーンとして使用することを検討しています。誰か提案はありますか?

4

1 に答える 1

2

http://support.microsoft.com/kb/307968

ItemDrag:このイベントは、ユーザーがツリーノードのドラッグを開始するとすぐにソースTreeViewコントロールから発生します。これが発生した場合は、DoDragDropメソッドを呼び出して、ドラッグアンドドロップ手順を開始します。

したがって、他のイベントが発生する前に、ItemDragのイベントハンドラーを追加し、DoDragDropを呼び出す必要があります。

于 2012-04-20T00:40:33.310 に答える