Сложные свойства и конвертеры типов

Последнее обновление: 30.01.2016

В предыдущих темах мы рассмотрели определение элемента Button в коде XAML и установку ряда свойств через атрибуты:

<Button x:Name="messageButton" Width="120" Height="40" Content="Кнопка" HorizontalAlignment="Center"  Background="Red" />

Height и Width являются простыми свойствами. Они хранят числовое значение. А например, свойство HorizontalAlignment или Background уже являются более сложными по своей структуре. Так, если мы будем определять эту же кнопку в коде c#, то нам надо использовать следующий набор инструкций:

Button messageButton = new Button();
messageButton.Content = "Кнопка";
messageButton.Width = 120;
messageButton.Height = 40;
messageButton.HorizontalAlignment = HorizontalAlignment.Center;
messageButton.Background = new Windows.UI.Xaml.Media.SolidColorBrush(Windows.UI.Colors.Red);

Для определения выравнивания по центру используется перечисление HorizontalAlignment, а для установки фонового цвета - класс SolidColorBrush.

В коде XAML мы ничего такого не увидели и устанавливали эти свойства гораздо проще с помощью строк. Дело в том, что по отношению к коду XAML применяются специальные объекты - type conventer или конвертеры/преобразователи типов, которые могут преобразовать значения из XAML к тем объектам, которые мы используем в коде C#.

В то же время мы можем более явно использовать эти объекты в коде XAML:

<Button x:Name="messageButton" Width="120" Height="40" Content="Кнопка">
    <Button.HorizontalAlignment>
        <HorizontalAlignment>Center</HorizontalAlignment>
    </Button.HorizontalAlignment>

    <Button.Background>
        <SolidColorBrush Opacity="0.5" Color="Red" />
    </Button.Background>
</Button>

Плюсом такого подхода является то, что у объектов мы можем установить дополнительные параметры. Так, в данном случае у объекта SolidColorBrush кроме цвета также устанавливается и прозрачность (Opacity="0.5"), что сложно сделать при сокращенном определении свойства Background="Red"

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850