Создать свой собственный слайдер для мультитач приложения - PullRequest
0 голосов
/ 17 января 2012

Элемент управления Slider в WPF не работает должным образом для того, что я ищу.

Мне нужно сдвинуть 2 разных элемента управления (Slider) одновременно (одним пальцем на каждом).Когда я касаюсь первого ползунка, он получает всю фокусировку, и я не могу больше ничего касаться моим вторым сенсорным устройством.

Поэтому мне нужно создать свой собственный ползунок (MySlider), который наследуется от ползунка.Я сделал 4 метода:

protected override void OnTouchDown(TouchEventArgs e)
protected override void OnTouchUp(TouchEventArgs e)
protected override void OnTouchLeave(TouchEventArgs e)
protected override void OnTouchMove(TouchEventArgs e)

Но есть ли способ переместить ползунок точно так же, как с помощью мыши?Или мне нужно рассчитывать каждый раз, когда мое сенсорное устройство двигалось что-то вроде:

protected override void OnTouchMove(TouchEventArgs e)
{
    base.OnTouchMove(e);

    if (this.Value <= this.Maximum && this.Value >= this.Minimum)
    {
        Point newPoint = e.GetTouchPoint(this).Position;
        this.Value += (this.lastPoint.Y - newPoint.Y);
        lastPoint = newPoint;
    }  
    e.Handled = true;
}

И в этом случае движение не движется с той же скоростью, что и палец ...

Ответы [ 2 ]

1 голос
/ 18 января 2012

Возможно, вы захотите проверить Surface 2.0 SDK , так как он содержит класс SurfaceSlider , который, как я считаю, позволит одновременно обновлять два или более ползунка.Этот SDK можно использовать для таргетинга приложений, созданных для Windows 7.

1 голос
/ 18 января 2012

Я не знаком с мультитач-событиями в WPF, поэтому не смогу вам в этом помочь. Однако, для перемещения мыши в то же место, что и касание, вы можете посмотреть на этот ответ здесь .

Ваша проблема в том, что вы предполагаете, что ширина элемента управления равна максимальному значению. Вам необходимо вывести коэффициент фактической ширины относительно разницы между максимальным и минимальным значениями.

Это может быть сделано только через события, так как нет перенаправленного события или DP для положения мыши.

...