2010-01-14 14 views
8

İki WPF ağaç görünümü ile iki arasında sürükleyip bırakmaya izin veren bir programım var. Sorun şu ki, ağaç görüntülerini açmak/kapamak can sıkıcı olabilir, çünkü farenin sol tuşunu basılı tutarken fareyi hareket ettirmek sadece sürükle/bırak işlevini tetikler. Bir sürükle/bırak olarak kabul edilmeden önce farenin ne kadar hareket etmesi gerektiğini belirlemenin bir yolu var mı?WPF sürüklenme mesafesi eşiği

+0

bazı kod gönderebilir miyim:

public class DraggableControl : UserControl { private Point? _initialMousePosition; public DraggableControl() { PreviewMouseDown += OnPreviewMouseDown; } private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { _initialMousePosition = e.GetPosition(this); } 

Ayrıca, MouseMove taşındı mesafeyi kontrol etmek ve en sonunda sürükleme işlemini başlatmak için ele? – ChrisF

cevap

1

Sürüklemenin ne zaman başladığını belirleyen kodunuza küçük bir tampon oluşturun. bayrak fare aşağı

  • fare hareket

    1. - bu varsa evet, onun daha uzak belirttiğiniz ne olursa olsun tampon daha taşınmış olup olmadığını kontrol eğer .. aşağı fare için kontrol
    2. (3 piksel muhtemelen iyidir) sürüklemeyi başlat.
  • 16

    Bunun için bir sistem parametresi var. Eğer

    Point down = {where mouse down event happened} 
    Point current = {position in the MouseMove eventargs} 
    

    varsa o zaman fare

    Math.Abs(current.X - down.X) >= SystemParameters.MinimumHorizontalDragDistance || 
    Math.Abs(current.Y - down.Y) >= SystemParameters.MinimumVerticalDragDistance) 
    
    0

    Drag için this makalesinin ardından ve uygulanmasını Bırak eğer asgari sürükle mesafe taşındı, sürükleyerek geciktirmek için 2 fare olaylarını işlemek zorunda kalacak fare belli bir mesafeye gelene kadar. Öncelikle, kontrolünüze göre ilk fare konumunu kaydeden PreviewMouseDown için bir işleyici ekleyin. MouseDown olayını kullanmayın çünkü bu bir köpürme olayıdır ve kontrolünüze ulaşmadan önce bir çocuk kontrolü tarafından ele alınabilir.

    İlgili konular