Даже если вы не собираетесь идти по полному маршруту MVVM, вам следует переключиться с использования событий click на реализацию ICommand, которая поддерживает логику CanExecute (например, этот из MVVM Light).
Использование команды автоматически отключит любой связанный элемент управления (например, кнопку или элемент меню), когда CanExecute имеет значение false. Затем вы можете иметь всю логику для управления вашими командами, сгруппированными в одном месте, включая проверку, которая позволит нажимать кнопку ОК только тогда, когда ваш объект находится в допустимом состоянии.
Если вы просто хотите пойти по стандартному маршруту WPF (не MVVM), вы можете добавить что-то вроде этого в конструктор вашего окна
public MyView()
{
....
Ok_Button.Command =
new RelayCommand(() => DialogResult = true, // just setting DialogResult is sufficient, no need to call Close()
// put the required validation logic here
() => dxSpinEdit.Value > 0 && dxSpinEdit.Value < 10);
Cancel_Button.Command = new RelayCommand(() => DialogResult = false);
// replace this with the actual event from SpinEdit
dxSpinEdit.ValueChanged += (s,e) => (OK_Button.Command as RelayCommand).RaiseCanExecuteChanged();
}
Да, я знаю, это выглядит ужасно & # x1f600; - Я бы предложил следовать шаблону проектирования MVVM вместо этого. При использовании MVVM все функциональные возможности команды принадлежат вашей ViewModel.
В любом случае, вы можете удалить все обработчики щелчков и mousedown из ваших кнопок.