我正在使用Silverlight Control Toolkit中的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 :(得分:1)
我认为它引入问题的MessageBox
本身的模态性质。使用您的代码我可以重现问题。我也可以得到它,这样当总数只有0或1时,单击一个框可以使它跳到3。
然而,当我拿出MessageBox
时,一切都按预期工作。
答案 1 :(得分:0)
NumericUpDown使用RepeatButton,它可以多次触发click事件。如果您的NumericUpDown控件不需要非常高(例如您发布的示例中它不接受大于3的总和)您可以更改控件的模板以使用Button。
注意:我尝试更改SpinnerStyle模板,但这不起作用。我不得不改变NumericUpDown样式,并指向我修改版的SpinnerStyle