Каков наилучший подход для создания всплывающих окон MDI в WPF? - PullRequest
0 голосов
/ 07 мая 2009

Мне нужно создать прототип, чтобы проверить способность WPF выполнять следующие действия:

  • одно базовое окно в качестве базы приложения
  • в этом окне пользователь может щелкнуть (например, «добавить клиента»), и появится новое окно
    • всплывающее окно яркое
    • главное окно на заднем плане затемнено
  • если пользователь нажимает на главное окно
    • главное окно становится ярким
    • всплывающее окно затенено и уходит в фон
  • любые изменения в одном окне, которые мы должны применить немедленно во всех окнах, яркие или затемненные

Вопросы:

  1. должны ли дочерние окна быть пользовательскими элементами управления или окнами?
  2. существует ли какой-либо "каркас MDI", которым я могу воспользоваться
  3. Есть ли что-то особенное, что я должен учитывать, чтобы убедиться, что все окна постоянно обновляются, например, использовать ObservableCollections и т. д .?
  4. я должен хранить все глобальные переменные как свойства в главном окне, чтобы дочерние окна могли получить к ним доступ?
  5. как бы вы пошли о "затемнении окна" или "размывании окна" в WPF?

Любой совет приветствуется.

1 Ответ

1 голос
/ 07 мая 2009
  1. Дочерние окна должны быть производными от Window, а затем вызвать Show () для экземпляра вашего класса, чтобы показать немодальное диалоговое окно.
  2. Не то, что я знаю.
  3. Используйте привязку данных WPF, чтобы поддерживать все в актуальном состоянии - ваши классы данных должны реализовывать INotifyPropertyChanged и предоставлять коллекции через ObservableCollection, как вы заявили. Главное окно и всплывающее окно должны иметь один и тот же объект для DataContext, поэтому, если один экран изменяет свойство объекта, другой будет автоматически обновляться.
  4. Используйте представление модели - шаблон модели для обеспечения четкого разделения данных и пользовательского интерфейса. Попробуйте этот инструментарий: http://blogs.msdn.com/ivo_manolov/archive/2009/05/03/9584900.aspx
  5. Там нет настоящей функции "затемнения", но вы можете сделать что-то вроде этого:

Код:

<Window>
  <Grid x:Name="dimElement">
    <Grid Background="Gray" Opacity="0.5" Visibility="Collapsed"/>
    <Grid>
      main content goes here
    </Grid>
   </Grid>
</Window>

Если вы хотите затемнить окно, установите Visibility on dimElement на «Visible» и установите для него «Collapsed», чтобы он был затемнен соответствующим образом.

Надеюсь, это поможет!

...