Silverlight NumericUpDown ValueChanging срабатывает дважды

Я использую элемент управления NumericUpDown из Silverlight Control Toolkit, который иногда дважды запускает событие 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, это вызовет сообщение, потому что событие запускается дважды... (опять же, это происходит не всегда)


person KodiakMx    schedule 11.03.2011    source источник
comment
Я не могу воспроизвести эту проблему, можете ли вы предоставить более подробную информацию.   -  person AnthonyWJones    schedule 11.03.2011
comment
Информация дополнена дополнительной информацией, заранее спасибо.   -  person KodiakMx    schedule 11.03.2011
comment
Спасибо Энтони за это издание... :)   -  person KodiakMx    schedule 11.03.2011


Ответы (2)


NumericUpDown использует RepeatButton, который может запускать событие щелчка несколько раз. Если ваши элементы управления NumericUpDown не должны быть очень высокими (как в опубликованном вами примере, где он не принимает больше суммы, превышающей 3), вы можете изменить шаблон элемента управления, чтобы вместо этого использовать кнопку.

Примечание. Я попытался изменить только шаблон SpinnerStyle, но это не сработало. Мне пришлось изменить стиль NumericUpDown и указать на мою модифицированную версию SpinnerStyle.

person Arturo Molina    schedule 11.03.2011

Я думаю, что проблема заключается в модальном характере самого MessageBox. С вашим кодом я могу воспроизвести проблему. Я также могу сделать так, чтобы, когда общее количество равно только 0 или 1, один щелчок вверх по полю мог привести к переходу на 3.

Однако, когда я вынимаю MessageBox, все работает, как и ожидалось.

person AnthonyWJones    schedule 11.03.2011