İşte yaptığım şey. DragDrop kodunuzda, PreviewMouseLeftButtonDown'a abone olun. Zaten üzerine tıklamak istediğiniz öğe seçilirse, e.Handled değerini true olarak ayarlayın.
Aşağıdaki örnekte, liste kutusu öğesinin bir bölümünü sürükleme tutamacı olarak (çarpmalarla) tanımlayacağım, böylece öğe ile sürükle yüzeyi arasında ayrım yapabilirim. Sadece liste kutusu öğesi veri şablonunu ve sürükleme tutamaç öğesinin adını kabul etmek için sürükle ve bırak davranışını almam gerekiyordu. Devam eden benim işten
PreviewMouseLeftButtonDown:
private void ItemsControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
dragStartPoint = e.GetPosition(null);
ItemsControl itemsControl = this.AssociatedObject as ItemsControl;
if (itemsControl != null)
{
this.sourceItemContainer = itemsControl.ContainerFromElement((Visual)e.OriginalSource) as FrameworkElement;
}
// If this is an multiple or extended selection list box, and on a drag grip, then ensure the item being hit is selected
// This prevents the ItemsControl from using this MouseDown to change selection, except over a selected item's drag grip.
if ((this.IsMultipleSelectionListBox() == true) && (this.IsOriginalSourceDragGrip(e) != false) && (this.IsSourceListBoxItemSelected() == true))
{
e.Handled = true;
}
}
Daha sonra farklı bir yanıtı tekrar kabul edersiniz. Öyleyse diğer cevabı daha iyi seviyorsan, kabul et. – Rohit
Aşağıdaki bağlantıyı kullanmanızı öneririm. Harika çalışıyor. http://stackoverflow.com/a/23151248 – Youngjae