2011-04-24 32 views
1

我确实设置了一个计数器,并确实增加了多次,而只有一次点击滑块(根本没有拖动)为什么?为什么多次触发Silverlight滑块的ValueChanged而仅点击一次?

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

回答

1

首先,我认为这不是一个编程问题,如果它是我没有理解它。

不管怎样,想想滑块行为:该值可以通过点击滑线多次改变或只是拖动滑块按钮向左/右。

因此,如果用户,或者你在这种情况下,单击该按钮,然后将其拖动到所需的位置,你将有只有一个点击,但所造成的拖动多个的ValueChanged事件。

+0

我没把课程 – user310291 2011-04-24 11:13:41

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中指定的本地值。

0

这可能是因为一个滑块模板由拇指和左,右侧RepeatButton.

表示,从它按下时 一再提高其 Click事件控制直到它被释放。

如果你不想要这个功能,你应该修改模板并将它们从RepeatButtons改为普通按钮。让我知道你是否需要样品。

如果你没有Expression Blend中,这个页面可以帮助你了解什么成分组成Sliderhttp://msdn.microsoft.com/en-us/library/ms753256.aspx(注:这是WPF,但Silverlight的版本是相似的)