Расширение разметки {TemplateBinding}
Связывает значение свойства в шаблоне элемента управления со значением другого предоставленного свойства в шаблонном элементе управления. TemplateBinding можно использовать только в определении ControlTemplate в XAML.
Использование атрибутов XAML
<object propertyName="{TemplateBinding sourceProperty}" .../>
Использование атрибута XAML (для свойства Setter в шаблоне или стиле)
<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>
Значения XAML
Срок | Description |
---|---|
propertyName | Имя свойства, заданного в синтаксисе метода задания. Это должно быть свойство зависимостей. |
sourceProperty | Имя другого свойства зависимостей, существующего в шаблонном типе. |
Замечания
Использование TemplateBinding является основной частью определения шаблона элемента управления, если вы являетесь автором пользовательского элемента управления или заменяете шаблон элемента управления для существующих элементов управления. Дополнительные сведения см . в кратком руководстве. Шаблоны элементов управления.
Это довольно распространено для propertyName и targetProperty , чтобы использовать то же имя свойства. В этом случае элемент управления может определить свойство самостоятельно и перенаправить свойство в существующее и интуитивно именованное свойство одного из его компонентов. Например, элемент управления, включающий TextBlock в его состав, который используется для отображения собственного свойства text элемента управления, может включать этот XAML как часть шаблона элемента управления: <TextBlock Text="{TemplateBinding Text}" .... />
Типы, используемые в качестве значения исходного свойства и целевого свойства, должны совпадать. При использовании TemplateBinding нет возможности ввести преобразователь. Сбой сопоставления значений приводит к ошибке при анализе XAML. Если вам нужен преобразователь, можно использовать подробный синтаксис для привязки шаблона, например: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}
Попытка использовать TemplateBinding за пределами определения ControlTemplate в XAML приведет к ошибке синтаксического анализа.
Вы можете использовать TemplateBinding для случаев, когда шаблонное родительское значение также откладывается в качестве другой привязки. Оценка для TemplateBinding может ждать, пока все необходимые привязки среды выполнения имеют значения.
ШаблонBinding всегда является односторонняя привязка. Оба используемых свойства должны быть свойствами зависимостей.
TemplateBinding — это расширение разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют символы "{" и "}" в синтаксисе атрибутов, что является соглашением, с помощью которого обработчик XAML распознает, что расширение разметки должно обрабатывать атрибут.
Примечание. В реализации процессора XAML среда выполнения Windows отсутствует представление резервного класса для 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>