2011-03-11 110 views
1

我使用Silverlight控件工具包中的NumericUpDown控件,它有时会在一次更新中双击ValueChanging事件(单击上一个或下一个按钮)。有没有人知道这种行为的任何workarround?Silverlight NumericUpDown ValueChanging两次触发


更多信息:
我有下面的XAML代码:

<StackPanel> 
     <toolkit:NumericUpDown Name="numericUpDown1" 
           Width="35" 
           Minimum="0" 
           Maximum="3" 
           ValueChanging="valueChanging" /> 
     <toolkit:NumericUpDown Name="numericUpDown2" 
           Width="35" 
           Minimum="0" 
           Maximum="3" 
           ValueChanging="valueChanging" /> 
     <toolkit:NumericUpDown Name="numericUpDown3" 
           Width="35" 
           Minimum="0" 
           Maximum="3" 
           ValueChanging="valueChanging" /> 
    </StackPanel> 

和代码的事件:

private void valueChanging(object sender, RoutedPropertyChangingEventArgs<double> e) 
    { 
     if (numericUpDown1.Value + numericUpDown2.Value + numericUpDown3.Value > 3) 
     { 
      e.Cancel = true; 
      MessageBox.Show("No more than 3 in total"); 
     } 
    } 

的错误出现不是所有的时间,但有些时候该事件被激发两次,并且即使当我刚刚总共有3 ... (即并非所有时间都发生)时,警报也会出现: 增加到2第一个,然后到第二个,第一个到第三个。显示一条消息并且它是正确的。将firt降低到1,并且如果将第三个增加到1,则会触发该消息,因为事件被两次触发......(再次,并非所有这一切都发生)

+0

我无法重现此问题,您能否提供更多详细信息。 – AnthonyWJones 2011-03-11 09:31:13

+0

信息扩展与更多的信息,在此先感谢。 – KodiakMx 2011-03-11 18:27:32

+0

感谢安东尼为那个版本:) – KodiakMx 2011-03-11 19:17:05

回答

0

NumericUpDown使用RepeatButton,它可以多次触发点击事件。如果您的NumericUpDown控件不需要变得非常高(例如您发布的示例中,它不接受大于3的总和),则可以将控件的模板更改为使用Button。

注:我试着改变只是SpinnerStyle模板,但没有奏效。我不得不改变NumericUpDown风格,并指向我修改后的SpinnerStyle版本

1

我认为它的模态性质MessageBox本身就是引入了这个问题。用你的代码我可以重现这个问题。我也可以得到它,所以当总数只有0或1时,单击一个盒子就可以使它跳到3.

但是,当我将MessageBox取出时,一切都按预期工作。