2017-11-28 10 views
1

私はTelerik RadTreeViewを持っています。WPF&Telerik RadTreeView:ドラッグ時にItemSelectedイベントを傍受するにはどうすればよいですか?

私はItemSelectedイベントを使用して、選択したアイテムの詳細ビューを開きます。

ドラッグアンドドロップ機能を使用して、ツリー内のアイテムの階層を並べ替えることができます。特にない。

問題は、ツリー内のアイテムをクリックしてドラッグすると、ItemSelectedイベントが発生したため、そのアイテムの詳細ビューが開きます。 ItemSelectedイベントがキャンセルされるか、または傍受して詳細ビューが表示されないように、アイテムがItemSelectedイベントが発生する前にドラッグされていることがわかりますか?

答えて

0

DragDropManagerがイベントをインターセプトする前にItemSelectedイベントが発生するため、完了する予定の操作がドラッグ&ドロップ操作であることを知る方法がありません。したがって、ItemSelectedの使用はここでは利用できません。

ただし、すべてが失われることはありません。 ItemClickイベントはMouseUpでのみ発生します。そのため、DragDrop操作中は起動しません。便利なことに、DragDropManagerはイベントを処理して、マウスボタンを離したときにDropで起動しないようにします。

ItemClickイベントでItemSelectedビヘイビアを実行します(ItemSelectedと同じイベントシグネチャを持つため、名前を変更して意味的に正しいものにすることができます)。

XAML

<MyTreeView ItemClick="MyTreeView_OnItemClick" /> 

選択にトリガするために表示されるユーザーへの分離コード

public class CodeBehind { 

    public CodeBehind() { 
     var handleDroppedEvents = true; 
     DragDropManager.AddDropHandler(MyTreeView, MyTreeView_OnDropCompleted, handleDroppedEvents); 
     DragDropManager.AddDragDropCompletedHandler(MyTreeView, MyTreeView_OnDragDropCompleted, handleDroppedEvents); 
    } 

    private void MyTreeView_OnItemClick(object sender, RadRoutedEventArgs e) { 
     var tree = (RadTreeView) sender; 
     .... 
    } 

    private void MyTreeView_OnDropCompleted(object sender, DragEventArgs e) { 
     /* If you want to suppress the default drop behaviour 
     * e.g. moving items around your tree */ 
     var options = 
      DragDropPayloadManager.GetDataFromObject(e.Data, TreeViewDragDropOptions.Key) as TreeViewDragDropOptions; 

     if (options == null) 
      return; 

     /* Tell Telerik not to do its default thing */ 
     options.DropAction = DropAction.None; 
    } 

    private void MyTreeView_OnDragDropCompleted(object sender DragDropCompletedEventArgs e) { 
     .... 
    } 

} 

今すぐあなたのItemSelectedプロセスますが、選択はドラッグで傍受し、置き換えられますドラッグすると機能が落ちます。

関連する問題