为多点触控应用程序创建自己的Slider

时间:2012-01-17 12:12:46

标签: wpf slider touch multi-touch

WPF中的Slider控件对我正在寻找的内容无法正常工作。

我需要同时滑动2个不同的控件(滑块)(每个手指一个)。 当我触摸第一个滑块时,它会获得所有焦点,我无法用我的第二个触摸设备触摸任何其他东西。

所以我需要创建自己的Slider(MySlider)继承自Slider。 我做了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 个答案:

答案 0 :(得分:1)

我不熟悉WPF中的多点触控事件,因此无法为您提供帮助。但是,要将鼠标移动到与触摸相同的位置,您可以查看此答案here

您认为控件的宽度等于最大值的问题。您需要将相对于最大值和最小值之间差异的实际宽度取出因子。

这只能通过事件来完成,因为没有路由事件或用于鼠标位置的DP。

答案 1 :(得分:1)

您可能需要查看Surface 2.0 SDK,因为它包含一个名为SurfaceSlider的类,我相信这将允许同时更新两个或更多个滑块。此SDK可用于定位为Windows 7构建的应用程序。