我确实放了一个计数器,确实它增加了多次,而滑块上只有一次点击(根本没有拖动)为什么?
namespace testslider
{
public partial class MainPage : UserControl
{
private int counter = 0;
public MainPage()
{
InitializeComponent();
}
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
counter = counter + 1;
}
}
}
答案 0 :(得分:1)
首先,我认为这不是一个编程问题,如果是这样的话,我也许不能理解它。
无论如何,请考虑滑块行为:可以通过在滑块线中多次单击或仅通过向左/向右拖动滑块按钮来更改值。
因此,如果用户或您在这种情况下单击按钮然后将其拖动到所需位置,则只需单击一次,但拖动会导致多个 ValueChanged 事件。
答案 1 :(得分:0)
我试图重复你的实验并得到不同的结果。有了这个标记:
<Grid>
<StackPanel>
<Slider Minimum="1" Maximum="10" Value="5" ValueChanged="Slider_ValueChanged"/>
</StackPanel>
</Grid>
和这个代码隐藏:
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Debug.WriteLine("ValueChanged: {0} => {1}", e.OldValue, e.NewValue);
}
我得到了这个调试输出:
ValueChanged: 0 => 1
ValueChanged: 1 => 5
没有完全点击而没有拖动而点击不会产生额外的ValueChanged
事件。所以我确实看到了两个ValueChanged
个事件,但它们是在启动期间发生的,而不是在点击期间发生第一个事件是被强制转换为有效范围的值,第二个事件是XAML中指定的本地值。
答案 2 :(得分:0)
这可能是因为滑块的模板由拇指,左侧和右侧RepeatButton
.
表示引发其的控件 从时间开始重复点击事件 它被按下直到它被释放。
如果您不想要此功能,则应修改模板并将其从RepeatButtons更改为常规按钮。如果您需要样品,请告诉我。
如果您没有Expression Blend,此页面可帮助您了解构成Slider
的组件。 http://msdn.microsoft.com/en-us/library/ms753256.aspx(注意:这是WPF,但Silverlight版本类似)