Я бездельничал с PreviewLostKeyboardFocus
который почти получает Вас там. Я видел, что несколько реализаций используют LostFocus
, но это просто сдерживает внимание на TextBox
после того, как это потеряло фокус, и можно легко видеть это смещение на экране. В основном я просто ищу тот же тип поведения, которое Вы могли получить с использованием OnValidating
в WinForms.
На мой взгляд, лучший способ, как правило, не делать этого. Почти всегда лучше просто отключить другие элементы управления или предотвращать сохранение до тех пор, пока значение не будет действительным.
Но если ваш дизайн действительно нуждается в этой способности, вот что вы должны сделать:
Перехватить Предварительный просмотр
версия клавиатуры и события мыши на уровне окна, или любой объем, который вы хотите предотвратить фокус Изменения внутри (например,, возможно, не ваша строка меню).
Когда в текстовом поле обнаружена вкладка или возвращаемый ключ, или когда Mousedown обнаруживается за пределами текстового поля, пока он имеет фокус, вызовите обновления () в выражении привязки, то если проверка не удалась = TRUE, чтобы предотвратить обработку события класса или Mousedown или Mousedown.
также продолжайте обработку PreviewLostkeyboardFocus
, чтобы уловить любые причины изменения фокусировки, не от клавиатуры или мыши, или что ваш другой код не распознал.