2012-04-20 17 views
1

現在、添付プロパティを使用してTreeViewのドラッグアンドドロップの実装を行っています。長い話をする短いドラッグ&ドロップを有効/無効にするために、添付プロパティを使用したいと考えています。私はすべてを稼働させることができました。そして、私は本当に奇妙な問題に遭遇しています。 TreeView.DragOverイベントを監視して、ツリー内のどこに新しいアイテムを挿入するかを決定しています。私の問題は、TreeViewItemのコンテンツ(境界線またはtextBlock)の右にドラッグすると、DragOverイベントが生成されますが、DragEventArgs.OriginalSourceプロパティがTreeViewコントロールのGrid要素に設定されていることです。グリッドやTreeViewItemはイベントを生成しませんか?TreeViewItemドラッグアンドドロップでDragOverイベントが発生しない

次のイベントに結びつけコードでそれをチョキである:私はまた、マウスをドラッグアンドドロップするので動作しません。その上に配置されているツリービューアイテムを決定するためにHitTestを使用しようとした

/// 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_;     
    } 
} 

すべてのマウスイベントを停止しているようだ。

基本的に私はTreeViewItemの右側全体をドラッグアンドドロップのドロップゾーンとして使用し、アイテムのコンテンツをホストする領域だけでなく、誰にも何か提案はありますか?

答えて

2

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

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

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

+0

私には分かりませんが、私はDoDragDrop呼び出しを開始する部分を省略しました。基本的に私は「...」に入っています。ドラッグを開始するためにMouseMoveとMouseLeftButtonDownを使用します。基本的にドラッグアンドドロップはうまくいきますが、TreeViewItemの右側にカーソルを置くと、すべてのTreeViewItemでHitTestが失敗し、TreeViewの最下位レベルのグリッドからイベントが発生します。 – Etienne

関連する問題