Язык программирования C#9 и платформа .NET5
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>. (Пока не беспокойтесь о коде кисти; вы освоите графику WPF в главе 26.)<LinearGradientBrush>Любое свойство может быть установлено с использованием синтаксиса "свойство-элемент", который всегда сводится к следующему шаблону:
<i><ОпределяющийКласс></i><i> <ОпределяющийКласс.СвойствоОпределяющегоКласса></i><i> <! -- Значение для свойства определяющего класса —></i><i> </ОпределяющийКласс.СвойствоОпределяющегоКласса></i><i></ОпределяющийКласс></i>Хотя любое свойство может быть установлено с применением такого синтаксиса, указание значения в виде простой строки, когда подобное возможно, будет экономить время ввода. Например, вот гораздо более многословный способ установки свойства
элементаWidth:Button<Button Height="50" Content="OK!"FontSize="20" Foreground="Yellow">...<Button.Width>100</Button.Width></Button>Понятие присоединяемых свойств XAML
В дополнение к синтаксису "свойство-элемент" в XAML поддерживается специальный синтаксис, используемый для установки значения присоединяемого свойства. По существу присоединяемое свойство позволяет дочернему элементу устанавливать значение свойства, которое определено в родительском элементе. Общий шаблон, которому нужно следовать, выглядит так:
<i><РодительскийЭлемент></i><i> <ДочернийЭлемент РодительскийЭлемент.СвойствоРодительскогоЭлемента</i><i>= "Значение"></i><i></РодительскийЭлемент></i>Самое распространенное применение синтаксиса присоединяемых свойств связано с позиционированием элементов пользовательского интерфейса внутри одного из классов диспетчеров компоновки (
,Gridи т.д.). Диспетчеры компоновки более подробно рассматриваются в главе 25, а пока введите в редакторе Kaxaml следующую разметку:DockPanel<Pagexmlns="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>Здесь определен диспетчер компоновки
, который содержит элементCanvas. Обратите внимание, что с помощью синтаксиса присоединяемых свойств элементEllipseспособен информировать свой родительский элемент (Ellipse) о том, где располагать позицию его левого верхнего угла.CanvasВ отношении присоединяемых свойств следует иметь в виду несколько моментов. Прежде всего, это не универсальный синтаксис, который может применяться к любому свойству любого родительского элемента. Скажем, приведенная далее разметка XAML содержит ошибку:
<b><!-- Попытка установки свойства Background в Canvas</b><b> через присоединяемое свойство. Ошибка! --></b><Canvas Height="200" Width="200"><Ellipse Canvas.Background="LightBlue"Canvas.Top="40" Canvas.Left="90"Height="20" Width="20" Fill="DarkBlue"/>