为什么Silverlight滑块ValueChanged被多次触发,而它只被点击一次?

时间:2011-04-24 09:25:17

标签: c# .net wpf silverlight

我确实放了一个计数器,确实它增加了多次,而滑块上只有一次点击(根本没有拖动)为什么?

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;
        }
    }
}

3 个答案:

答案 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版本类似)