Модальное окно WPF ведет себя странно - PullRequest
0 голосов
/ 26 июня 2010

Я сталкиваюсь с ситуацией, которую не понимаю, и хочу, чтобы кто-нибудь меня просветил, если это возможно.

Создано приложение WPF. Для простоты рассмотрим это приложение как одно окно. Я поместил некоторые элементы управления в это окно, среди прочего есть элемент управления TextBox (назовем его TB).

Существует требование, чтобы этот ТБ всегда был в фокусе (если кто-то что-то печатает или что-то читается через сканер штрих-кода, он должен появиться там).

Я подумал реализовать это с помощью таймера: каждую секунду фокус переносится на ТБ.

До сих пор все работает нормально (как и ожидалось).

Странная вещь заключается в следующем: скажем, новый пользователь хочет использовать это окно, поэтому он должен войти в систему. Я подумал реализовать это с помощью нового объекта Window (давайте назовем его W2), назвав его следующим образом:

W2.ShowDialog();

Это окно W2 должно быть модальным (имейте в виду, что таймер все еще работает).

Сумасшедшая вещь в том, что под Windows Vista это работает отлично , как и ожидалось (это означает, что W2 модальный и пользователь может делать то, что он должен делать на W2), НО в Windows XP, как только пользователь хочет что-то набрать в текстовом поле W2, фокус возвращается на ТБ в начальном окне (насколько я могу интерпретировать: это означает, что W2 равен , а не * 1023). * модально !!!? я прав?).

Как я могу преодолеть эту ситуацию?

Это правильный подход?

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 26 июня 2010

Убедитесь, что для свойства Владелец W2 установлено главное окно.

Из указанных документов:

Когда вы открываете дочернее окно, вызывая ShowDialog, вы также должны установить свойство Owner дочернего окна.

1 голос
/ 27 июня 2010

Я не уверен, что эта настройка фокусировки назад каждые несколько секунд такая хорошая идея. Всегда возможно, что некоторый вход будет поступать в интервале между потерянным и полученным состоянием фокуса (и будет потерян). Альтернативные решения перехватывают событие PreviewKeydown в форме, в которой находится ТБ, и каким-то образом устанавливают также выходной сигнал сканера тактов.

...