Чтение онлайн

на главную

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

<StackPanel>

<Button x:Name="myButton" Width="100" Height="100"

Click="myButton_Click"

Template="{StaticResource RoundButtonTemplate}"></Button>

<Button x:Name="myButton2" Width="100" Height="100"

Template="{StaticResource RoundButtonTemplate}"></Button>

<Button x:Name="myButton3" Width="100" Height="100"

Template="{StaticResource RoundButtonTemplate}"></Button>

</StackPanel>

Встраивание

визуальных подсказок с использованием триггеров

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

RoundButtonTemplate
разметка такого типа не определена и потому внешний вид элемента управления остается идентичным независимо от действий мыши. В идеальном случае элемент должен выглядеть немного по-другому, когда на нем совершается щелчок (возможно, за счет изменения цвета или отбрасывания тени), чтобы уведомить пользователя об изменении визуального состояния.

Задачу можно решить с применением триггеров, как вы только что узнали. Для простых операций триггеры работают просто великолепно. Существуют дополнительные способы достижения цели, которые выходят за рамки настоящей книги, но больше информации доступно по адресу

https://docs.microsoft.com/ru-ru/dotnet/desktop/wpf/controls/how-to-create-apply-template
.

В качестве примера обновите шаблон

RoundButtonTemplate
разметкой, которая добавляет два триггера. Первый триггер будет изменять цвет фона на синий, а цвет переднего плана на желтый, когда курсор находится на поверхности элемента управления. Второй триггер уменьшит размеры элемента
Grid
(а также его дочерних элементов) при нажатии кнопки мыши, когда курсор расположен в пределах элемента.

<ControlTemplate x:Key="RoundButtonTemplate" TargetType="Button" >

<Grid x:Name="controlLayout">

<Ellipse x:Name="buttonSurface" Fill="LightBlue" />

<Label x:Name="buttonCaption" Content="OK!"

FontSize="20" FontWeight="Bold"

HorizontalAlignment="Center"

VerticalAlignment="Center" />

</Grid>

<ControlTemplate.Triggers>

<Trigger Property="IsMouseOver" Value="True">

<Setter TargetName="buttonSurface" Property="Fill"

Value="Blue"/>

<Setter TargetName="buttonCaption"

Property="Foreground" Value="Yellow"/>

</Trigger>

<Trigger Property="IsPressed" Value="True">

<Setter TargetName="controlLayout"

Property="RenderTransformOrigin" Value="0.5,0.5"/>

<Setter TargetName="controlLayout"

Property="RenderTransform">

<Setter.Value>

<ScaleTransform ScaleX="0.8" ScaleY="0.8"/>

</Setter.Value>

</Setter>

</Trigger>

</ControlTemplate.Triggers>

</ControlTemplate>

Роль

расширения разметки {TemplateBinding}

Проблема с шаблоном элемента управления связана с тем, что каждая кнопка выглядит и содержит тот же самый текст. Следующее обновление разметки не оказывает никакого влияния:

<Button x:Name="myButton" Width="100" Height="100"

Background="Red" Content="Howdy!" Click="myButton_Click"

Template="{StaticResource RoundButtonTemplate}" />

<Button x:Name="myButton2" Width="100" Height="100"

Background="LightGreen" Content="Cancel!"

Template="{StaticResource RoundButtonTemplate}" />

<Button x:Name="myButton3" Width="100" Height="100"

Background="Yellow" Content="Format"

Template="{StaticResource RoundButtonTemplate}" />

Причина в том, что стандартные свойства элемента управления (такие как

BackGround
и
Content
) переопределяются в шаблоне. Чтобы они стали доступными, их потребуется отобразить на связанные свойства в шаблоне. Решить такие проблемы можно за счет использования расширения разметки
{TemplateBinding}
при построении шаблона. Оно позволяет захватывать настройки свойств, которые определены элементом управления, применяющим шаблон, и использовать их при установке значений в самом шаблоне.

Ниже приведена переделанная версия шаблона

RoundButtonTemplate
, в которой расширение разметки
{TemplateBinding}
применяется для отображения свойства
Background
элемента
Button
на свойство
Fill
элемента
Ellipse
; здесь также обеспечивается действительная передача значения
Content
элемента
Button
свойству
Content
элемента
Label
:

<Ellipse x:Name="buttonSurface" Fill="{TemplateBinding Background}"/>

<Label x:Name="buttonCaption" Content="{TemplateBinding Content}"

FontSize="20" FontWeight="Bold" HorizontalAlignment="Center"

VerticalAlignment="Center" />

После такого обновления появляется возможность создания кнопок с разными цветами и текстом. Результат обновления разметки XAML представлен на рис.27.13.

Роль класса ContentPresenter

Поделиться:
Популярные книги

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Отмороженный 9.0

Гарцевич Евгений Александрович
9. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 9.0

Под знаменем пророчества

Зыков Виталий Валерьевич
3. Дорога домой
Фантастика:
фэнтези
боевая фантастика
9.51
рейтинг книги
Под знаменем пророчества

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Дядя самых честных правил 8

Горбов Александр Михайлович
8. Дядя самых честных правил
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Дядя самых честных правил 8

Para bellum

Ланцов Михаил Алексеевич
4. Фрунзе
Фантастика:
попаданцы
альтернативная история
6.60
рейтинг книги
Para bellum

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Покоритель Звездных врат

Карелин Сергей Витальевич
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат

Отборная бабушка

Мягкова Нинель
Фантастика:
фэнтези
юмористическая фантастика
7.74
рейтинг книги
Отборная бабушка

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Смертник из рода Валевских. Книга 1

Маханенко Василий Михайлович
1. Смертник из рода Валевских
Фантастика:
фэнтези
рпг
аниме
5.40
рейтинг книги
Смертник из рода Валевских. Книга 1

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

Тройняшки не по плану. Идеальный генофонд

Лесневская Вероника
Роковые подмены
Любовные романы:
современные любовные романы
6.80
рейтинг книги
Тройняшки не по плану. Идеальный генофонд

Возвращение Низвергнутого

Михайлов Дем Алексеевич
5. Изгой
Фантастика:
фэнтези
9.40
рейтинг книги
Возвращение Низвергнутого