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
8
A
Odpowiedz
1
Wystarczy utworzyć mały bufor do kodu, który określa, kiedy zaczyna się przeciąganie.
- flaga mysz w dół
- 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)
- 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:
możesz pisać jakiś kod? – ChrisF