Что такое расширения разметки XAML? - PullRequest
3 голосов
/ 03 января 2012

Я попытался прочитать статью MSDN о расширениях разметки, но не могу выяснить, что они являются (в статье обсуждается, что они делают ).

Я не могу найти четкого объяснения , почему нам нужны расширения разметки .Если мы можем получить доступ к объекту управления напрямую, зачем нам нужно расширение разметки для доступа к объекту привязки?

Нужны ли нам расширения разметки, чтобы XAML знал код позади (в противном случае нет никакого способа получить доступ?любой из встроенных классов)?Но тогда как мы можем получить доступ ко всем типам управления?

Ответы [ 3 ]

5 голосов
/ 03 января 2012

Расширения разметки предназначены не для доступа, а для расширения функциональности разметки (как следует из названия), делая все, что вы хотите, например, создание ассоциаций (Binding, x:Reference) или получение типа класса (* 1003). *).

Их можно использовать практически для всего, они необходимы только в том случае, если разметки недостаточно.

1 голос
/ 30 мая 2017

Обоснование расширений разметки:

XAML прост, и это хорошо. Это просто на основе XML язык, используемый для объявления объектов и отношений между ними. Одним из побочных эффектов простоты является то, что он может быть многословным. Это громоздкое многословие было одной из главных причин, почему концепция введены расширения разметки. Расширение разметки может использоваться для превратить много строк XAML в одно сжатое выражение ...

Еще один побочный эффект простоты XAML - отсутствие «Встроенные» знания об общих артефактах, используемых WPF или CLR; такие как ссылки на ресурсы, привязка данных, нулевое значение, массивы, статические члены класса и т. д. Поскольку XAML может быть неотъемлемой частью Для разработки приложений должен быть какой-то способ для разработчиков выразить в нем эти идеи.

<TextBox >
  <TextBox.Text>A text in TextBox</TextBox.Text>
</TextBox>

<TextBox Text="{x:Static system:Environment.UserName}" />

Этот последний синтаксис также предоставляет способ использовать в нашей сборке значения, отличные от буквенной строки (то есть, который является новым объектом), например, уже созданный объект или статический объект. В этом смысле расширения разметки являются объектами, которые решают как свойство будет установлено во время выполнения.

0 голосов
/ 05 июля 2018

С https://wpftutorial.net/XAML.html:

Расширения разметки являются динамическими заполнителями для значений атрибутов в XAML.Они разрешают значение свойства во время выполнения.

Расширения разметки окружены фигурными скобками (пример: Background="{StaticResource NormalBackgroundBrush}").

WPF имеет несколько встроенных расширений разметки, но вы можете написать свое собственное, основываясь на MarkupExtension.Это встроенные расширения разметки:

  • Binding

    Чтобы связать значения двух свойств вместе.

  • StaticResource

    Однократный поиск записи ресурса

  • DynamicResource

    Автоматическое обновление поиска записи ресурса

  • TemplateBinding

    Чтобы связать свойство шаблона элемента управления со свойством зависимостей элемента управления

  • x:Static

    Разрешить значение статического свойства.

  • x:Null

    Возвращаемое значение NULL

Первый идентификатор в пределахПара фигурных скобок - это название расширения.Все идентификаторы имеют именованные параметры в форме Property = Value.В следующем примере показана метка, содержимое которой связано с текстом текстового поля.Когда вы вводите текст в текстовое поле, свойство текста изменяется, и расширение разметки привязки автоматически обновляет содержимое метки.

<TextBox x:Name="textBox"/>
<Label Content="{Binding Text, ElementName=textBox}"/>

Относительно чторасширение разметки состоит из :

Все расширения разметки происходят от абстрактного класса MarkupExtension и переопределяют его метод ProvideValue.Соглашение об именовании заключается в добавлении слова Extension к имени подкласса (только класс Binding не следует шаблону).

Синтаксический анализатор XAML позволяет создавать расширения разметки в {фигурных скобках}, а также позволяет опускать суффикс Расширения при использовании расширения разметки, если вы хотите.Пример кода:

<!--- Configure a binding markup extension via the special curly brace syntax --->
<TextBox Text="{Binding Path=Name}" Width="120"/>

<!--- Configure a binding markup extension via the standard element syntax --->
<Checkbox Content="Is person alive?">
    <Checkbox.IsChecked>
        <Binding Path="IsAlive"/>
    </Checkbox.IsChecked>
</Checkbox>

В приведенном выше XAML взгляните на свойство Text TextBox и свойство IsChecked CheckBox. Они оба используют расширение разметки Binding для привязки своих значений к свойству в контексте данных (объект Person).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...