2015-09-02 69 views
0

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

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

如果没有,有没有人有任何建议如何可以实施?我想我可以用操纵事件做些事情。

回答

0

有一种方法可以根据拖动速度更改滑块的步长。 您必须订阅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毫秒的延迟。就是这样。

+0

我在想我需要做这样的事情,希望有建立它的东西。我可以将音量设置为任何我想要的数字。如果您现在快速将滑块从1移动到100,则它具有发送100音量更改命令,因为valuechanged会发射100次... 1,2,3,4,5,6,8,9,10等...但是如果我以速度为基础,并且步数达到10,我只能发送10个音量命令:10,20,30等 – Jason