2017-11-28 1 views
1

Ich habe eine Telerik RadTreeView.WPF & Telerik RadTreeView: Wie kann ich das ItemSelected-Ereignis beim Ziehen abfangen?

Ich verwende das ItemSelected-Ereignis, um eine Detailansicht für das ausgewählte Element zu öffnen.

Ich verwende die Drag-and-Drop-Funktionalität zu tun, wie Sie es erwarten, die Hierarchie der Elemente in meiner Struktur neu anzuordnen. Nichts Besonderes.

Das Problem kommt, dass, wenn ich klicke, um das Element in meinem Baum zu ziehen, öffnet es die Detailansicht für dieses Element, da das ItemSelected-Ereignis ausgelöst wird. Gibt es einen Punkt, an dem ich feststellen kann, dass ein Element vor dem Auslösen des ItemSelected-Ereignisses gezogen wird, sodass ich das ItemSelected-Ereignis abbrechen oder abfangen kann und verhindern kann, dass die Detailansicht angezeigt wird?

Antwort

0

Das ItemSelected-Ereignis wird ausgelöst, bevor der DragDropManager Ereignisse abfangen kann. Daher gibt es keine Möglichkeit zu wissen, dass der Vorgang, den Sie gerade ausführen, ein Drag & Drop-Vorgang ist. Daher kann die Verwendung von ItemSelected hier nicht verwendet werden.

Aber alles ist nicht verloren. Das ItemClick-Ereignis wird nur auf MouseUp ausgelöst und daher während einer DragDrop-Operation nicht ausgelöst. Praktischerweise behandelt der DragDropManager das Ereignis so, dass es nicht auf Drop ausgelöst wird, wenn Sie die Maustaste loslassen.

So führen Sie Ihr ItemSelected Verhalten im ItemClick Ereignis (das die gleiche Ereignissignatur wie ItemSelected hat, so dass Sie es einfach umbenennen können, um die Dinge semantisch korrekt zu halten).

XAML

<MyTreeView ItemClick="MyTreeView_OnItemClick" /> 

Codebehind

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) { 
     .... 
    } 

} 

Jetzt ist Ihr itemSelected Prozess wird dem Benutzer bei der Auswahl der triggern zu erscheinen, aber die Auswahl wird mit dem Schlepp abgefangen und ersetzt werden/Drop-Funktionalität, wenn Sie ziehen.

Verwandte Themen