2010-11-20 25 views
1

Tuvalimde bazı özel denetimlerim var.WPF'de Seç ve Sürükle arasında fark yaratın

Bu kontroller sürükle ve bırak ile hareket ettirilebilir veya tıklanarak seçilebilir.

Şimdi
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
    { 
     base.OnPreviewMouseLeftButtonDown(e); 
     this.isDragInProgress = false; 

     // Cache the mouse cursor location. 
     this.origCursorLocation = e.GetPosition(this); 

     // Walk up the visual tree from the element that was clicked, 
     // looking for an element that is a direct child of the Canvas. 
     var source = e.Source; 

     var element = this.FindCanvasChild(source as DependencyObject); 

     if (element == null || !(element is MyControl)) 
      return; 

     this.ElementBeingDragged = element; 

     // Get the element's offsets from the four sides of the Canvas. 
     this.draggedLeft = Canvas.GetLeft(this.ElementBeingDragged); 
     this.darggedTop = Canvas.GetTop(this.ElementBeingDragged); 

     // Set the Handled flag so that a control being dragged 
     // does not react to the mouse input. 
     e.Handled = true; 

     this.isDragInProgress = true; 
    } 

, benim sorunum ben hiçbir MouseClick olay özel üzerinde bulunmaktadır (... üzerinde MyControl tıklayarak seçemezsiniz şudur:

Şimdi, Sürükle uygulanan ve böyle bir şey Bırak Kontrol, ne de MouseDown şimdi çalışıyor ..)

e.Handled = true; yorumunu bildirirseniz, kontrol siz sürüklerken bu seçimi değiştirecektir, eğer yorum yapmazsanız, kontrol siz onu değiştirmeyecektir .... (

cevap

5

Bir M'deki sürükleme işlemine başlamak yerine ouseDown işleyicisi, bazı başlangıç ​​durumlarını kaydedebilir ve bunun yerine, bir sürükleme işlemine başlamak için yeterli hareket olup olmadığını görmek için SystemParameters.MinimumHorizontalDragDistance ve SystemParameters.MinimumVerticalDragDistance karşı denetleyebileceğiniz bir MouseMove işleyicide sürüklemeyi taahhüt edebilirsiniz. Ardından, sürükleme işlemini tamamlamak için bir MouseUp işleyicisine kod ekleyebilir veya hareket çok küçük olduğu için başlamadıysa, bunun yerine bir seçim yapın.

0

Size yardımcı olabilecek bir kod proje makalesi yazdım. Makale sürükle seçimi ve birden çok öğe sürükleme ile ilgilidir.

MouseMove olay işleyicisinde, kullanıcının eşik mesafesinden daha fazla sürüklemesini test eden bir kod vardır, bu olduğunda sürükleme işlemi başlatılır.

http://www.codeproject.com/KB/WPF/SimpleDragSelection.aspx

İlgili konular