我需要创建一个慢速滑块,因此如果用户移动太快,滑块将尝试慢慢地触及鼠标。就像低通过滤运动一样。
我需要这个,因为滑块会影响发动机的动力,而这种动力不应该太快变化。
我是数据绑定的新手,但我用我的属性绑定了两种方式并且它有效。所以我想继续使用这个滑块,而不需要重新编码太多东西。
我尝试抓住ValueChanged,检查旧值和新值之间的差异是否太大,但是我无法编辑e.NewValue(它只是暴露了Get,没有设置) 我尝试使用我的新值在ValueChanged中设置slider.Value,但它会导致stackoverflow(我想由于绑定会转发更改)
我也尝试使用Thumb_DragDelta,但我再次看到了值,但无法设置新的(较小的)delta。
任何线索???
修改 我输入了控制受影响的属性的Set部分的最大增加的代码(绑定的)因此增加实际上减慢了但是,只有移动鼠标才会发生更新,如果你拖得太快,那么拇指停留在后面,你停止移动鼠标,拇指不跟着你。如果单击移动鼠标,则拇指会移动到鼠标上。
我想这是因为更改的值仅在DragDelta发生时调用,并且只发生在onMouseMove上..
有任何解决方法吗?
答案 0 :(得分:1)
免责声明:这是另一种解决方案。
一个落后于光标的滑块对我来说似乎很奇怪。在UX方面,它会给人的印象是应用程序滞后而不是逐渐增加。我个人会创建一个带有禁用滑块和两个重复按钮的usercontrol。这看起来像这样:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel Orientation="Horizontal" Height="25">
<RepeatButton Click="ButtonLess_Click" Content="less"/>
<Slider Width="200" IsEnabled="False" Name="Slider1" ></Slider>
<RepeatButton Click="ButtonMore_Click" Content="more"/>
</StackPanel>
</Window>
代码背后的代码:
private void ButtonLess_Click(object sender, RoutedEventArgs e)
{
Slider1.Value = Math.Max(Slider1.Minimum, Slider1.Value - Slider1.SmallChange);
}
private void ButtonMore_Click(object sender, RoutedEventArgs e)
{
Slider1.Value = Math.Min(Slider1.Maximum, Slider1.Value + Slider1.SmallChange);
}
这样你就不能滑动滑块本身,而是点击/按住&#34; less&#34;或者&#34;更多&#34;逐渐增加或减少滑块。