Нестабильный фокус приложений WPF

Если у меня проблемы с WPF, то это всегда касается Focus-Management. Бывают случаи, когда мое приложение полностью теряет фокус, так что другое приложение получает фокус, а мое приложение работает в фоновом режиме. Это происходит в основном, если некоторые окна в моем приложении будут закрыты. Это известная проблема WPF. Есть ли у кого-то похожие проблемы?

Я уже открыл другую ветку для этого, но никто не смог помогите, может быть, это было немного подробно. Поэтому это краткая версия.

ОБНОВЛЕНИЕ

Похоже, я нашел простой способ взлома, который помогает предотвратить поведение, которое я описываю в другая ветка. Если у вас возникла та же проблема, попробуйте, поможет ли это вам. Если у вас есть объяснение, есть награда за ...

Я оставляю этот пост открытым на несколько дней, может быть, у кого-то есть хороший общий вклад в проблематику WPF-focus. Вероятно, я не понимаю логику, стоящую за этим, но пока я не пойму, это IMO, действительно худшая часть WPF (что IMO является действительно фантастическим продуктом). Если мне нужно рассказать кому-то, с чем у меня были проблемы в последние годы в WPF, это будут: Focusmgmt, Focusmgmt и еще раз Focusmgmt.


person HCL    schedule 13.07.2010    source источник
comment
ВАГ здесь: Измените клавиатуру / мышь. Если у вас сенсорный экран, узнайте у производителя о призрачных щелчках. Если вы используете ноутбук, обновите драйверы пэда или полностью отключите его.   -  person    schedule 13.07.2010


Ответы (2)


Чтобы потерять фокус для всего приложения, убедитесь, что вы установили свойство Owner для всех окон, прежде чем показывать их.

Для потери фокуса внутри приложения обычно это происходит, когда какой-то элемент управления, о котором вы не думали, получает, но ничего не показывает (например, какой-то случайный StackPanel или Grid, используемый для макета), вам нужно выследить их и добавить Focusable="false"

person Nir    schedule 13.07.2010
comment
Спасибо за совет. Я дважды проверил это, но я всегда устанавливаю владельца, прежде чем показывать окно. Я также пытался установить владельца как абсолютно первое свойство после построения окна, но это не помогло. - person HCL; 13.07.2010
comment
Я принял ваш ответ, потому что это была хотя бы попытка. Если вас интересует решение, посмотрите мои правки в сообщении - Спасибо за ответ - person HCL; 16.07.2010

+1 Так как я тоже сталкивался с подобными проблемами в своем приложении. Я работаю над VS-подобным приложением (пользователь может добавлять (из панели инструментов) и настраивать элементы управления на холсте), и фокус таинственным образом теряется после выполнения различных команд, таких как Delete и т. Д. Я должен использовать Canvas.Focus() явно для сброса фокуса, и это тоже иногда не работает.

person akjoshi    schedule 13.07.2010