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.