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

ЖАНРЫ

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

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.)

Любое свойство может быть установлено с использованием синтаксиса "свойство-элемент", который всегда сводится к следующему шаблону:

<ОпределяющийКласс>

<ОпределяющийКласс.СвойствоОпределяющегоКласса>

<!
– - Значение для свойства определяющего класса —>

</ОпределяющийКласс.СвойствоОпределяющегоКласса>

</ОпределяющийКласс>

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

Width
элемента
Button
:

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

FontSize="20" Foreground="Yellow">

...

<Button.Width>

100

</Button.Width>

</Button>

Понятие присоединяемых свойств XAML

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

<РодительскийЭлемент>

<ДочернийЭлемент РодительскийЭлемент.СвойствоРодительскогоЭлемента

= "Значение">

</РодительскийЭлемент>

Самое распространенное применение синтаксиса присоединяемых свойств связано с позиционированием элементов пользовательского интерфейса внутри одного из классов диспетчеров компоновки (

Grid
,
DockPanel
и т.д.). Диспетчеры компоновки более подробно рассматриваются в главе 25, а пока введите в редакторе Kaxaml следующую разметку:

<Page

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

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

<Canvas Height="200" Width="200" Background="LightBlue">

<Ellipse Canvas.Top="40" Canvas.Left="40" Height="20"

Width="20" Fill="DarkBlue"/>

</Canvas>

</Page>

Поделиться с друзьями: