Разработка пользовательского интерфейса на основе технологии Windows Presentation Foundation. Михаил Абрамян
Чтение книги онлайн.
Читать онлайн книгу Разработка пользовательского интерфейса на основе технологии Windows Presentation Foundation - Михаил Абрамян страница 10
Итак, к действиям по явному присоединению обработчика к событию и его последующему отсоединению следует подходить крайне осторожно.
Недочет. При выполнении программы может возникнуть ситуация, когда одна или обе кнопки не будут отображаться в окне (если, например, кнопки были перемещены на новое место при развернутом окне, после чего окно возвращено в исходное состояние).
Исправление. Определите для окна обработчик события SizeChanged:
Результат. Теперь в ситуации, когда при изменении размера окна его кнопки оказываются вне клиентской части, происходит перемещение этих кнопок на исходные позиции около левого верхнего угла окна.
Комментарии
1. В данном обработчике демонстрируется еще один способ доступа к компонентам окна, который удобен для организации перебора в цикле компонентов с похожими именами. Этот способ основан на применении метода FindName, который можно вызывать непосредственно для окна. Метод FindName возвращает компонент окна с указанным именем (или null, если компонент с таким именем в окне отсутствует).
2. Вместо статического метода GetLeft для получения значения присоединенного свойства Left можно было бы использовать более длинный, но и более универсальный вариант, использующий метод GetValue того компонента, к которому ранее было присоединено свойство: (double)b.GetValue(Canvas.LeftProperty). Аналогичным образом можно получить значение свойства Top (и любых других свойств зависимости, присоединенных к данному компоненту).
2. Работа с несколькими окнами: WINDOWS
Рис. 7. Окна приложения WINDOWS
2.1. Настройка визуальных свойств окон. Открытие окон в обычном и диалоговом режиме
После создания проекта к нему необходимо добавить два дополнительных окна. Для этого требуется выполнить команду Project | Add Window… и в появившемся диалоговом окне указать имя класса, который будет связан с новым окном. Достаточно использовать имена, предлагаемые по умолчанию – Window1 для первого окна, Window2 для второго.
Рис. 8. Макет окна MainWindow приложения WINDOWS
MainWindow.xaml (рис. 8):
Window1.xaml:
Window2.xaml:
В файле MainWindow.xaml.cs в начало описания класса MainWindow добавьте