C# 为什么Silverlight slider ValueChanged会被多次触发,而它只被单击一次?
我确实放了一个计数器,它确实增加了很多倍,而只需点击一次滑块(根本没有拖动),为什么C# 为什么Silverlight slider ValueChanged会被多次触发,而它只被单击一次?,c#,.net,wpf,silverlight,C#,.net,Wpf,Silverlight,我确实放了一个计数器,它确实增加了很多倍,而只需点击一次滑块(根本没有拖动),为什么 名称空间测试滑块 { 公共部分类主页面:UserControl { 专用整数计数器=0; 公共主页() { 初始化组件(); } 私有无效滑块1_值已更改(对象发送方,RoutedPropertyChangedEventArgs e) { 计数器=计数器+1; } } } 首先,我认为这不是一个编程问题,如果是,我可能还没有很好地理解它 无论如何,请考虑滑块行为:可以通过在滑块行中单击多次或仅通过将滑块按钮拖动
名称空间测试滑块
{
公共部分类主页面:UserControl
{
专用整数计数器=0;
公共主页()
{
初始化组件();
}
私有无效滑块1_值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
计数器=计数器+1;
}
}
}
首先,我认为这不是一个编程问题,如果是,我可能还没有很好地理解它
无论如何,请考虑滑块行为:可以通过在滑块行中单击多次或仅通过将滑块按钮拖动到左/右来更改该值
因此,如果用户或您(在本例中)单击按钮,然后将其拖动到所需位置,您将只有一次单击,但拖动会导致多个值更改事件。首先,我认为这不是编程问题,如果是,我可能还没有很好地理解它 无论如何,请考虑滑块行为:可以通过在滑块行中单击多次或仅通过将滑块按钮拖动到左/右来更改该值
因此,如果用户(在本例中是您)单击按钮,然后将其拖动到所需位置,您将只单击一次,但拖动会导致多个值更改事件。我尝试重复您的实验,但得到了不同的结果。使用此标记:
<Grid>
<StackPanel>
<Slider Minimum="1" Maximum="10" Value="5" ValueChanged="Slider_ValueChanged"/>
</StackPanel>
</Grid>
完全不单击和不拖动单击不会产生额外的
ValueChanged
事件。因此,我确实看到两个ValueChanged
事件,但它们发生在启动期间,而不是单击期间。第一个事件是强制位于有效范围内的值,第二个事件是XAML中指定的本地值。我试图重复您的实验,但得到了不同的结果。使用此标记:
<Grid>
<StackPanel>
<Slider Minimum="1" Maximum="10" Value="5" ValueChanged="Slider_ValueChanged"/>
</StackPanel>
</Grid>
完全不单击和不拖动单击不会产生额外的
ValueChanged
事件。因此,我确实看到两个ValueChanged
事件,但它们发生在启动期间,而不是单击期间。第一个事件是强制位于有效范围内的值,第二个事件是XAML中指定的本地值。这可能是因为滑块的模板由拇指和左右两侧组成
表示引发其
从时间开始反复单击事件
将其按下,直到松开为止
如果不需要此功能,则应修改模板并将其从RepeatButtons更改为常规按钮。如果你需要样品,请告诉我
如果您没有Expression Blend,本页可能会帮助您了解组成
滑块的组件。(注意:这是WPF,但Silverlight版本与之类似)这可能是因为滑块的模板由拇指和左右两侧组成
表示引发其
从时间开始反复单击事件
将其按下,直到松开为止
如果不需要此功能,则应修改模板并将其从RepeatButtons更改为常规按钮。如果你需要样品,请告诉我
如果您没有Expression Blend,本页可能会帮助您了解组成滑块的组件。(注意:这是WPF,但Silverlight版本类似)
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Debug.WriteLine("ValueChanged: {0} => {1}", e.OldValue, e.NewValue);
}
ValueChanged: 0 => 1
ValueChanged: 1 => 5