1

私はSilverlightControlToolkitのNumericUpDownコントロールを使用しています。これは、1回の更新でValueChangingイベントを2回トリガーすることがあります(上ボタンまたは下ボタンを1回クリックするだけです)。この動作の回避策を知っている人はいますか?


詳細:
次の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");
        }
    }

エラーは常に発生するわけではありませんが、イベントが2回発生し、合計が3の場合でもアラートが発生することがあります...たとえば(常に発生するわけではありません):最初のイベントを2に増やします。次に1秒に1、3番目に。メッセージが表示され、それは正しいです。最初の値を1に減らし、3番目の値を1に増やすと、イベントが2回トリガーされるため、メッセージが発生します...(これも常に発生するわけではありません)

4

2 に答える 2

1

MessageBox問題を引き起こしているのは、それ自体のモーダルな性質だと思います。あなたのコードで私は問題を再現することができます。また、合計が0または1の場合、ボックスを1回上クリックすると、3にジャンプするように取得することもできます。

しかし、私が取り出すと、MessageBoxすべてが期待どおりに機能します。

于 2011-03-11T19:21:56.777 に答える
0

NumericUpDownは、クリックイベントを数回発生させることができるRepeatButtonを使用します。NumericUpDownコントロールをそれほど高くする必要がない場合(3より大きい合計を受け入れない投稿の例のように)、代わりにボタンを使用するようにコントロールのテンプレートを変更できます。

注: SpinnerStyleテンプレートだけを変更しようとしましたが、うまくいきませんでした。NumericUpDownスタイルを変更する必要があり、SpinnerStyleの変更バージョンを指しています。

于 2011-03-11T21:39:44.200 に答える