2014-10-10 3 views
0

Я создал большой палец в WPF. Я использую событие DragDelta для изменения значения с помощью мыши и перетаскивания.WPF Неправильное поведение перетаскивания

Вот мой DragDelta код:

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    MyValue = e.VerticalChange; 
} 

Это прекрасно работает, однако, при повторном нажатии кнопки моей, значение начинается в точке, где я нажал (0). Мне нужно щелчок и перетащить, чтобы изменить значение относительно оригинала. Так что я попытался это:

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    MyValue += e.VerticalChange; 
} 

Это работает, но когда я тащу вниз, а затем снова, значение продолжает снижаться, несмотря на то, я двигаю мышь обратно вверх. То же самое при перемещении мышки вверх (увеличение значения), а затем перемещение мыши назад (значение увеличивается).

+1

Я сам столкнулся с этим вопросом. Оказывается, при определенных обстоятельствах 'e.HorizontalChange' и' e.VerticalChange' относятся к последнему событию DragStart, а не последнему событию DragDelta. – rookie1024

+0

Я также столкнулся с этой проблемой. Проблема исчезла, как только я запустил приложение в режиме деблокирования вместо режима отладки. – chriga

ответ

0

Вот как это работает:

double minLeft = double.MaxValue; 
double minTop = double.MaxValue; 
double left = Canvas.GetLeft(item); 
double top = Canvas.GetTop(item); 

minLeft = double.IsNaN(left) ? 0 : Math.Min(left, minLeft); 
minTop = double.IsNaN(top) ? 0 : Math.Min(top, minTop); 

double deltaHorizontal = Math.Max(-minLeft, e.HorizontalChange); 
double deltaVertical = Math.Max(-minTop, e.VerticalChange); 

заменить контроль контейнера с холста.

Смежные вопросы