Silverlight NumericUpDown ValueChanging触发两次

时间:2011-03-11 00:10:02

标签: silverlight silverlight-toolkit numericupdown

我正在使用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,它将触发消息,因为事件被触发了两次......(同样,并非所有时间都发生这种情况)

2 个答案:

答案 0 :(得分:1)

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

然而,当我拿出MessageBox时,一切都按预期工作。

答案 1 :(得分:0)

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

注意:我尝试更改SpinnerStyle模板,但这不起作用。我不得不改变NumericUpDown样式,并指向我修改版的SpinnerStyle