【问题标题】:Slider step rate based on speed of moving the slider基于移动滑块速度的滑块步进速率
【发布时间】:2015-09-02 02:08:32
【问题描述】:

我有一个 UWP XAML 应用程序,它使用滑块作为网络上音频硬件的音量控制。我的问题是发送音量更改之间需要 50 毫秒以上的延迟,所以如果我快速将滑块从最小值移动到最大值,硬件需要几秒钟才能赶上,因为应用程序正在发送一个新的 +1 级别每个 valuechanged 事件滑块。

我不想更改滑块的步长,因为我也想要精确控制。小步/大步并没有真正的帮助。是否有内置功能可以根据您移动滑块的速度更改步长,即慢速移动,步长 =1,中等移动步长 =5,快速移动步长 = 10?

如果没有,是否有人对如何实施有任何建议?我想我可以对操纵事件做点什么。

【问题讨论】:

    标签: c# xaml slider winrt-xaml


    【解决方案1】:

    有一种方法可以根据拖动速度更改滑块的步长。 您必须订阅ManipulationDelta 事件(不要忘记将滑块的ManipulationMode 设置为System 或None 以外的值)。 然后在处理程序中从ManipulationDeltaRoutedEventArgs 参数中获取Velocities。类似的东西

    public void MySlider_ManipulationDelta(object sender, 
      ManipulationDeltaRoutedEventArgs e)
    {
        var velocities = e.Velocities
        var slider = sender as Slider;
        if(slider != null)
        {
            //Create a fomula based on the velocities to fit your needs.
        }
    
    }
    

    您还应该记住在 ManipulationCompleted 事件上重置滑块的步长。

    话虽如此,但我看不出根据拖动速度更改步长将如何帮助您获得所需的结果。据我了解,由于您无法控制的参数(网络、硬件等),您的应用程序发送数据的时间与硬件反映更改的时间之间存在 50 毫秒的延迟。就是这样。

    【讨论】:

    • 我在想我需要做这样的事情,希望有一些东西可以构建它。我可以将音量设置为我想要的任何数字。如果您现在将幻灯片从 1 快速移动到 100,它会发送 100 个音量更改命令,因为 valuechanged 会触发 100 次... 1,2,3,4,5,6,8,9,10 等...但如果我以速度为基础,并且步数增加到 10,我只能发送 10 个音量命令:10、20、30 等
    猜你喜欢
    • 2020-01-13
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多