Вы можете позвонить Mouse.Capture
на UIElement
. Это даст вам каждое событие мыши, которое происходит независимо от того, находится он на элементе или нет. но его сложно использовать. Вы можете захватить мышь на своем текстовом поле и зарегистрироваться для потерянных событий захвата, когда вы потеряете захват, вы можете восстановить. Вы должны остерегаться странного поведения. Как правило, это плохая практика (я думаю) - не позволять пользователю уходить с поля. что лучше - позволить им делать все, что они захотят, но отключить кнопку, которую они нажимают после ввода данных, пока все поля не станут действительными (или что-то подобное)
Вот несколько ссылок
другой вопрос SO
Пример кода MSDN
поле со списком использует захват мыши, чтобы сказать, нажал ли пользователь в другом месте приложения, чтобы закрыть поле со списком, если оно открыто, если вы щелкнете по другому элементу управления (или вне окна)
Я не знаю, остановит ли вас эта техника, когда вы отключите элемент. В приложении wpf есть два вида фокуса. У вас есть логический фокус и клавиатурный фокус. Несколько элементов могут иметь логическую фокусировку одновременно (каждый в пределах фокуса). например, подумайте, что текстовое поле может иметь логический фокус, когда вы щелкаете меню (которое также имеет логический фокус). Фокус клавиатуры может быть только в одном месте одновременно. Вы собираетесь сделать много работы для себя. Я бы серьезно подумал, правильно ли вы взаимодействуете. Вы могли бы потратить дни, чтобы это взаимодействие было правильным. Если вы остановите текстовое поле, потеряв фокус, что произойдет, если пользователь нажмет кнопку закрытия?
вот статья msdn в фокусе