【问题标题】:Slider not working with touch input滑块不适用于触摸输入
【发布时间】:2013-07-05 05:53:01
【问题描述】:

我在 WPF 中有这个滑块:

<Slider x:Name="SizeSlider" IsManipulationEnabled="True" Width="100" Minimum="1" Maximum="10" Value="1" ValueChanged="SizeSlider_ValueChanged"></Slider>

我可以用鼠标拖动滑块的光标,但不能用触摸输入。

我需要做什么才能使用带有触摸输入的滑块?

【问题讨论】:

    标签: wpf xaml slider touch


    【解决方案1】:

    在我看来,您可能遇到了此处描述的问题:

    http://nui.joshland.org/2010/04/why-wont-wpf-controls-work-with-touch.html

    简而言之:IsManipulationEnabled如果不处理触摸事件,会影响触摸是否产生鼠标事件,所以需要确保处理正确的事件。

    【讨论】:

    • 谢谢!通过您提供的链接,我能够解决我的问题。但这与 IsManipulationEnabled 属性无关。我会添加我自己的答案,但由于你的答案也很有帮助,我会尽快投票(>15 代表)。
    • @MichaëlPolla 你已经 15 岁多了。
    • @Undo:完成! ...顺便说一句有趣的昵称 :-D 起初我不明白为什么我能够“撤消”评论...呵呵
    【解决方案2】:

    所以我找到了解决方案,感谢Agentlien提供的链接。

    在 XAML 中,添加一个 TouchDown 属性:

    <Slider x:Name="SizeSlider" Width="100" Minimum="1" Maximum="10" Value="1" ValueChanged="SizeSlider_ValueChanged" TouchDown="SizeSlider_TouchDown"/>
    

    (我还删除了 IsManipulationEnabled 属性,因为这里不需要)

    在 C# 代码隐藏中:

    private void SizeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        // Things you want to do everytime slider's value change
        // For example :
        _brushSize = e.NewValue;
    }
    
    
    private void SizeSlider_TouchDown(object sender, TouchEventArgs e)
    {
        // Mark event as handled
        e.Handled = true;
    }
    

    像这样,滑块可以同时用于鼠标和触摸输入。

    【讨论】:

    • 鉴于此解决方案解决了您的问题,您应该选择它作为已接受的答案,这样人们就知道该去哪里寻找了。
    • 谢谢提醒!我以前不能,因为我不得不再等 1 天 :) 再次感谢您的帮助!
    • 不客气。 :) 能够提供帮助总是很好的。当我的谷歌搜索带来了我提供的链接和指向这个问题的链接时,我碰巧遇到了类似的问题。所以,我想我最好将两者联系起来。