1

我正在使用 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,然后第二个到 1,第三个到 1。显示一条消息并且它是正确的。将第一个减小到 1,如果将第三个增加到 1,它将触发消息,因为该事件被触发了两次......(同样,并非总是发生这种情况)

4

2 回答 2

1

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

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

于 2011-03-11T19:21:56.777 回答
0

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

注意:我尝试只更改 SpinnerStyle 模板,但没有奏效。我不得不更改 NumericUpDown 样式,并指向我修改后的 SpinnerStyle 版本

于 2011-03-11T21:39:44.200 回答