Последней задачей является обработка события SelectionChanged
в связанном файле кода. Обратите внимание, что в следующем коде имеется возможность извлечения текущего ресурса по имени с использованием унаследованного метода TryFindResouce
:
private void comboStyles_Changed(object sender, SelectionChangedEventArgs e)
{
// Получить имя стиля, выбранное в окне со списком.
var currStyle=(Style)TryFindResource(lstStyles.SelectedValue);
if (currStyle==null) return;
// Установить стиль для типа кнопки.
this.btnStyle.Style=currStyle;
}
После запуска приложения появляется возможность выбора одного из четырех стилей кнопок на лету. На рис. 27.9 показано готовое приложение в действии.
Логические деревья, визуальные деревья и стандартные шаблоны
Теперь, когда вы понимаете, что собой представляют стили и ресурсы, есть еще несколько тем, которые потребуется раскрыть, прежде чем приступать к изучению построения специальных элементов управления. В частности, необходимо выяснить разницу между логическим деревом, визуальным деревом и стандартным шаблоном. При вводе разметки XAML в Visual Studio или в редакторе вроде Kaxaml разметка является StackPanel
новые элементы, они вставляются в Window
(или другого корневого элемента, такого как Page
или NavigationWindow
).
Однако за каждым логическим деревом стоит намного более сложное представление, которое называется
Полезно уяснить разницу между логическим и визуальным деревьями, потому что при построении специального шаблона элемента управления на самом деле производится замена всего или части стандартного визуального дерева элемента управления собственным вариантом. Следовательно, если нужно, чтобы элемент управления Button
визуализировался в виде звездообразной фигуры, тогда можно определить новый шаблон такого рода и подключить его к визуальному дереву Button
. Логически тип остается тем же типом Button
, поддерживая все ожидаемые свойства, методы и события. Но визуально он выглядит совершенно по-другому. Один лишь упомянутый факт делает WPF исключительно полезным API-интерфейсом, поскольку другие инструментальные наборы для создания кнопки звездообразной формы потребовали бы построения совершенно нового класса. В инфраструктуре WPF понадобится просто определить новую разметку.
На заметку! Элементы управления WPF часто описывают как лишенные внешности. Это относится к тому факту, что внешний вид элемента управления WPF совершенно не зависит от его поведения и допускает настройку.
Программное инспектирование логического дерева
Хотя анализ логического дерева окна во время выполнения — не слишком распространенное действие при программировании с применением WPF, полезно упомянуть о том, что в пространстве имен System.Windows
определен класс LogicalTreeHelper
, который позволяет инспектировать структуру логического дерева во время выполнения. Для иллюстрации связи между логическими деревьями, визуальными деревьями и шаблонами элементов управления создайте новый проект приложения WPF по имени TreesAndTemplatesApp
.
Замените элемент Grid
приведенной ниже разметкой, которая содержит два элемента управления Button
и крупный допускающий только чтение элемент TextBox
с включенными линейками прокрутки. Создайте в IDE-среде обработчики событий Click
для каждой кнопки. Вот результирующая разметка XAML:
Margin="4" BorderBrush="Blue" Height="40"
Click="btnShowLogicalTree_Click"/>
BorderBrush="Blue" Height="40" Click="btnShowVisualTree_Click"/>
Background="AliceBlue" IsReadOnly="True"
BorderBrush="Red" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility
="Auto" />
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT