Отключение содержимого внутри диалогового окна в WPF - PullRequest
2 голосов
/ 02 февраля 2012

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

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

Проблема, с которой я столкнулся, заключается в том, что пользователь по-прежнему может получить доступ ко всем таким сочным заблокированным элементам управления, нажимая на них с помощью клавиатуры. «Нет проблем», я слышал, вы говорите, «просто установите IsEnabled на панели в false, тем самым блокируя доступ с клавиатуры».

К сожалению, отключение элементов управления:

  • Не очень красиво выглядит
  • Имеет тенденцию к непредвиденным последствиям с пользовательскими стилями и привязками вниз по дереву

Итак, есть ли лучший способ отключить часть страницы, не устанавливая свойство «IsEnabled», чтобы оно не изменяло внешний вид любого из элементов управления?

Спасибо, Mark

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Я решил эту проблему, подписавшись на событие PreviewGotKeyboardFocus из родительского элемента в дереве, а затем обработав событие так, чтобы фокус никогда не передавался дочерним элементам.

Кроме того, мне пришлось явноконечно же, уберите фокус с «отключенных» элементов управления.

0 голосов
/ 02 февраля 2012

Можете ли вы поместить свой "диалоговый" XAML во всплывающее окно? Затем вызовите ShowDialog () для окна, чтобы сделать его модальным окном? Если вы не хотите, чтобы ваше всплывающее окно выглядело как стандартное окно, вы всегда можете использовать его для удаления границ и т. Д.

...