← Все вопросы

Что такое XAML и как читать его синтаксис?

Задан 26 месяцев назад612 просмотров2 ответа
8

В проектах WPF вся разметка в файлах .xaml. Это похоже на HTML, но с непонятными атрибутами вроде x:Class, xmlns и записью {Binding}. Что такое XAML вообще и как разобраться в его синтаксисе?

2 ответа

13
✓ Принятый ответ — помог автору

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 как дерево объектов — теги это объекты, атрибуты их свойства, фигурные скобки это динамические выражения.

5

Маленький лайфхак для понимания: всё, что можно написать в XAML, можно написать и на чистом C#. Например, эта разметка:

<TextBlock Text="Привет" FontSize="20"/>

эквивалентна коду:

var tb = new TextBlock();
tb.Text = "Привет";
tb.FontSize = 20;

XAML — это просто более удобный и наглядный способ создавать те же объекты. Как только это осознаешь, синтаксис перестаёт пугать.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект