Что такое XAML и как читать его синтаксис?
В проектах WPF вся разметка в файлах .xaml. Это похоже на HTML, но с непонятными атрибутами вроде x:Class, xmlns и записью {Binding}. Что такое XAML вообще и как разобраться в его синтаксисе?
2 ответа
XAML (eXtensible Application Markup Language, читается «замл») — это XML-подобный декларативный язык разметки для описания интерфейса. Каждый тег = объект .NET, каждый атрибут = свойство этого объекта.
Разберём по кусочкам:
<Button x:Name="okButton"
Content="OK"
Width="100"
Background="LightBlue"
Click="OkButton_Click"/>
<Button>— создаётся объектSystem.Windows.Controls.Button;Content="OK"— присваивается свойствуContent;x:Name="okButton"— даёт элементу имя, чтобы обращаться из C# код-бихайнда;Click="OkButton_Click"— подписка на событие.
Ключевые служебные конструкции:
xmlns=...— пространство имён по умолчанию (контролы WPF);xmlns:x=...— пространство имён XAML (x:Name,x:Class,x:Key);{Binding Path=Name}— расширение разметки (markup extension), связывает свойство с данными;{StaticResource myStyle}— ссылка на ресурс.
Когда свойство сложное, используют синтаксис свойства-элемента (property element syntax):
<Button>
<Button.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="Blue" Offset="1"/>
</LinearGradientBrush>
</Button.Background>
<TextBlock Text="Градиент"/>
</Button>
То есть <Button.Background> — это не отдельный элемент, а способ задать свойство Background, которое нельзя записать одной строкой.
Итог: читайте XAML как дерево объектов — теги это объекты, атрибуты их свойства, фигурные скобки это динамические выражения.
Маленький лайфхак для понимания: всё, что можно написать в XAML, можно написать и на чистом C#. Например, эта разметка:
<TextBlock Text="Привет" FontSize="20"/>
эквивалентна коду:
var tb = new TextBlock();
tb.Text = "Привет";
tb.FontSize = 20;
XAML — это просто более удобный и наглядный способ создавать те же объекты. Как только это осознаешь, синтаксис перестаёт пугать.