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

на главную

Жанры

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

<!-- Этот класс теперь будет объявлен как internal в файле *.g.cs —>

<Window x:Class="MyWPFApp.MainWindow" x:ClassModifier ="internal"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<!-- Эта кнопка будет объявлена как public в файле *.g.cs -->

<Button x:Name ="myButton" x:FieldModifier ="public" Content = "OK"/>

</Window>

По

умолчанию все определения типов C#/XAML являются открытыми (
public
), а члены — внутренними (
internal
). Однако для показанного выше определения XAML результирующий автоматически сгенерированный файл содержит внутренний тип класса с открытой переменной-членом
Button
:

internal partial class MainWindow : System.Windows.Window,

System.Windows.Markup.IComponentConnector

{

public System.Windows.Controls.Button myButton;

...

}

Элементы XAML, атрибуты XAML и преобразователи типов

После установки корневого элемента и необходимых пространств имен XML следующая задача заключается в наполнении корня дочерним элементом. В реальном приложении WPF дочерним элементом будет диспетчер компоновки (такой как

Grid
или
StackPanel
), который в свою очередь содержит любое количество дополнительных элементов, описывающих пользовательский интерфейс. Такие диспетчеры компоновки рассматриваются в главе 25, а пока предположим, что элемент
<Window>
будет содержать единственный элемент
Button
.

Как было показано ранее в главе, элементы XAML отображаются на типы классов или структур внутри заданного пространства имен .NET Core, тогда как атрибуты в открывающем дескрипторе элемента отображаются на свойства или события конкретного типа. В целях иллюстрации введите в редакторе Kaxaml следующее определение

<Button>
:

<Page

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Grid>

<!-- Сконфигурировать внешний вид элемента Button -->

<Button Height="50" Width="100" Content="OK!"

FontSize="20" Background="Green" Foreground="Yellow"/>

</Grid>

</Page>

Обратите внимание, что присвоенные свойствам значения представлены с помощью простого текста. Это может выглядеть как полное несоответствие типам данных, поскольку после создания такого элемента

Button
в коде C# данным свойствам будут присваиваться не строковые объекты, а значения специфических типов данных. Например, ниже показано, как та же самая кнопка описана в коде:

public void MakeAButton

{

Button myBtn = new Button;

myBtn.Height = 50;

myBtn.Width = 100;

myBtn.FontSize = 20;

myBtn.Content = "OK!";

myBtn.Background = new SolidColorBrush(Colors.Green);

myBtn.Foreground = new SolidColorBrush(Colors.Yellow);

}

Оказывается,

что инфраструктура WPF поставляется с несколькими классами преобразователей типов, которые будут применяться для трансформации простых текстовых значений в корректные типы данных. Такой процесс происходит прозрачно (и автоматически).

Тем не менее, нередко возникает потребность в присваивании атрибуту XAML намного более сложного значения, которое невозможно выразить посредством простой строки. Например, пусть необходимо построить специальную кисть для установки свойства

Background
элемента
Button
. Создать кисть подобного рода в коде довольно просто:

public void MakeAButton

{

...

// Необычная кисть для фона.

LinearGradientBrush fancyBruch =

new LinearGradientBrush(Colors.DarkGreen, Colors.LightGreen, 45);

myBtn.Background = fancyBruch;

myBtn.Foreground = new SolidColorBrush(Colors.Yellow);

}

Но можно ли представить эту сложную кисть в виде строки? Нет, нельзя! К счастью, в XAML предусмотрен специальный синтаксис, который можно использовать всякий раз, когда нужно присвоить сложный объект в качестве значения свойства; он называется синтаксисом "свойство-элемент".

Понятие синтаксиса "свойство-элемент" в XAML

Синтаксис "свойство-элемент" позволяет присваивать свойству сложные объекты. Ниже показано описание XAML элемента Button, в котором для установки свойства

Background
применяется объект
LinearGradientBrush
:

<Button Height="50" Width="100" Content="OK!"

FontSize="20" Foreground="Yellow">

<Button.Background>

<LinearGradientBrush>

<GradientStop Color="DarkGreen" Offset="0"/>

<GradientStop Color="LightGreen" Offset="1"/>

</LinearGradientBrush>

</Button.Background>

</Button>

Обратите внимание, что внутри дескрипторов

<Button>
и
</Button>
определена вложенная область по имени
<Button.Backgrounds>
, а в ней — специальный элемент
<LinearGradientBrush>
. (Пока не беспокойтесь о коде кисти; вы освоите графику WPF в главе 26.)

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

Если твой босс... монстр!

Райская Ольга
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Если твой босс... монстр!

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Прометей: Неандерталец

Рави Ивар
4. Прометей
Фантастика:
героическая фантастика
альтернативная история
7.88
рейтинг книги
Прометей: Неандерталец

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Попаданка в академии драконов 2

Свадьбина Любовь
2. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
6.95
рейтинг книги
Попаданка в академии драконов 2

Приручитель женщин-монстров. Том 12

Дорничев Дмитрий
12. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 12

Боги, пиво и дурак. Том 3

Горина Юлия Николаевна
3. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 3

Физрук: назад в СССР

Гуров Валерий Александрович
1. Физрук
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Физрук: назад в СССР

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Шесть тайных свиданий мисс Недотроги

Суббота Светлана
Любовные романы:
любовно-фантастические романы
эро литература
7.75
рейтинг книги
Шесть тайных свиданий мисс Недотроги

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

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

Моя (не) на одну ночь. Бесконтрактная любовь

Тоцка Тала
4. Шикарные Аверины
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Моя (не) на одну ночь. Бесконтрактная любовь

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Сильнейший ученик. Том 2

Ткачев Андрей Юрьевич
2. Пробуждение крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 2