2010-01-14 28 views
8

Mam program z dwoma widokami drzewa WPF, które umożliwiają przeciąganie i upuszczanie między nimi. Problem polega na tym, że otwieranie/zamykanie przedmiotów na widokach drzew może być denerwujące, ponieważ przesunięcie myszy o jeden piksel, przytrzymując lewy przycisk myszy, uruchamia funkcję przeciągania/upuszczania. Czy jest jakiś sposób określenia, jak daleko mysz powinna się przesunąć, zanim zostanie uznana za przeciągnięcie/upuszczenie?Próg odstępu przeciągania WPF

+0

możesz pisać jakiś kod? – ChrisF

Odpowiedz

1

Wystarczy utworzyć mały bufor do kodu, który określa, kiedy zaczyna się przeciąganie.

  1. flaga mysz w dół
  2. na ruch myszy - sprawdź mysz w dół .. jeśli tak, należy sprawdzić, czy jego przeniósł dalej niż cokolwiek bufor określić (3 pikseli to chyba dobrze)
  3. jeśli ma , uruchom przeciągnij.
16

Jest to parametr systemowy. Jeśli masz

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

następnie mysz przeniósł się minimalną odległość przeciągania jeśli

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

Following this artykuł dla przeciągnij i upuść realizacji, trzeba by obsłużyć 2 zdarzenia myszy w celu opóźnienia przeciąganie dopóki mysz nie przesunęła się o określoną odległość. Najpierw dodaj procedurę obsługi PreviewMouseDown, która przechowuje początkową pozycję myszy względem kontrolki. Nie należy używać zdarzenia MouseDown, ponieważ jest to zjawisko bąbelkowe i mogło zostać obsłużone przez kontrolkę podrzędną przed uzyskaniem kontroli.

public class DraggableControl : UserControl 
{ 
    private Point? _initialMousePosition; 

    public DraggableControl() 
    { 
    PreviewMouseDown += OnPreviewMouseDown; 
    } 

    private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { 
    _initialMousePosition = e.GetPosition(this); 
    } 

Dodatkowo uchwyt mouseMove sprawdzić przeniesiona dystans i ostatecznie rozpocząć operację przeciągania:

Powiązane problemy