Расширение разметки {TemplateBinding}
Связывает значение свойства в шаблоне элемента управления и значение какого-либо другого предоставленного свойства элемента управления-шаблона. TemplateBinding можно использовать только в определении ControlTemplate в XAML.
Использование атрибутов XAML
<object propertyName="{TemplateBinding sourceProperty}" .../>
Использование атрибута XAML (для свойства Setter в шаблоне или стиле)
<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>
Значения XAML
Термин | Описание |
---|---|
propertyName | Имя свойства, задаваемого в синтаксисе метода присваивания. Это свойство должно быть свойством зависимостей. |
sourceProperty | Имя другого свойства зависимостей, которое существует в типе, по которому создается шаблон. |
Комментарии
Использование TemplateBinding — фундаментальная часть процесса определения шаблона элемента управления независимо от того, создаете ли вы пользовательский элемент управления или заменяете шаблон для уже существующих элементов управления. Подробнее см. в разделе Краткое руководство: шаблоны элементов управления.
Использование одного и того же имени свойства — довольно частая практика для propertyName и targetProperty. В данном случае элемент управления может определить свойство для самого себя и перенаправить это свойство существующему и интуитивно названному свойству одного из своих компонентов. Например, элемент управления, который включает TextBlock в состав, который используется для отображения собственного свойства Text элемента управления, может включать этот КОД в качестве части шаблона элемента управления: <TextBlock Text="{TemplateBinding Text}" .... />
Типы, используемые в качестве значений исходного и целевого свойств, должны совпадать. При использовании TemplateBinding невозможно добавить конвертер. Несовпадение значений приводит к ошибке при синтаксическом анализе XAML. Если вам нужен преобразователь, можно использовать подробный синтаксис для привязки шаблона, например: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}
Попытка использования TemplateBinding вне определения ControlTemplate в XAML вызовет ошибку средства синтаксического анализа.
В случаях, когда родительское значение для шаблона также откладывается в качестве другой привязки, вы можете использовать TemplateBinding. Вычисление TemplateBinding можно отложить до момента, когда у требуемых привязок времени выполнения появятся значения.
Привязка TemplateBinding всегда действует только в одном направлении. Оба используемых свойства должны быть свойствами зависимостей.
TemplateBinding является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем простая настройка преобразователей типов на работу с определенными типами или свойствами. Для всех расширений разметки в XAML в синтаксисе атрибутов используются символы "{" и "}". Это соответствует соглашению, по которому процессор XAML распознает, что расширение разметки должно обработать атрибут.
Примечание В реализации процессора СРЕДА ВЫПОЛНЕНИЯ WINDOWS XAML отсутствует резервное представление класса для TemplateBinding. Расширение TemplateBinding предназначено исключительно для использования в разметке XAML. Не существует простого способа для воспроизведения этого поведения в коде.
x:Bind в ControlTemplate
Примечание
Для использования x:Bind в ControlTemplate требуется Windows 10, версия 1809 (пакет SDK 17763) или более поздней версии. Дополнительные сведения о целевых версиях см. в статье Адаптивный к версии код.
Начиная с Windows 10, версия 1809, расширение разметки x:Bind можно использовать везде, где используется TemplateBinding в ControlTemplate.
Свойство TargetType является обязательным (необязательно) в ControlTemplate при использовании x:Bind.
Благодаря поддержке x:Bind можно использовать как привязки функций , так и двусторонние привязки в ControlTemplate.
В этом примере свойство TextBlock.Text имеет значение Button.Content.ToString. TargetType в ControlTemplate выступает в качестве источника данных и обеспечивает тот же результат, что и templateBinding с родительским объектом.
<ControlTemplate TargetType="Button">
<Grid>
<TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
</Grid>
</ControlTemplate>
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по