Что такое привязка шаблона против привязки?
Я не мог понять BorderThickness="{TemplateBinding BorderThickness}.
Вот код:
<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
<Border Padding="{TemplateBinding Padding}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
также, Пожалуйста, объясните другие типы привязки.
4 ответов:
TemplateBinding используется для привязки к свойствам элемента в определении шаблона. В вашем примере, вы могли бы написать
<Border Padding="{Binding Padding}" ...>означает привязку свойства заполнения границы к свойству заполнения... что? вы хотели бы сказать: "свойство заполнения элемента управления, для которого используется этот шаблон."Вы не можете дать ему имя, потому что вы не знаете x:имя элемента управления в это время (даже если бы вы это сделали, это не сработало бы, потому что его в разные области видимости имен). Однако это можно сделать, определив относительный источник
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>или использовать TemplateBinding, который является ярлыком(*) для выше
<Border Padding="{TemplateBinding Padding}" ...>
(*) В дополнение к тому, чтобы быть менее подробным в этих сценариях шаблонов, TemplateBinding имеет несколько отличий по сравнению с обычной привязкой:
- оно вычисляется во время компиляции. (если, например, свойство Padding не существует, вы получите ошибку компиляции. Но если вы если бы вы использовали привязку с TemplatedParent, вы бы увидели ошибку только во время выполнения.)
- это всегда односторонняя привязка.
- для этого требуется, чтобы исходные и целевые свойства были свойства зависимостей.
- он имеет гораздо меньше функциональности (без StringFormat, Delay, IsAsync и т. д.. смотрите свойства обязательные vs TemplateBindingExtention).
картинка стоит 1000 слов. В данном случае это 7 минут видео:https://www.youtube.com/watch?v=z-0TZR-7xLI
EDIT: Пример:
- A
Buttonпо умолчаниюControlTemplateсобственность иHeightсвойства- вы переопределяете
ControlTemplateсвойстваButtonнаписав свой собственный (например, вы хотите сделатьEllipse-глядя кнопку вместоRectangle-ищу)- после того, как вы сделали
Ellipseв свой новыйControlTemplateвы хотитеEllipseбыть того же размера, что и оригинальная кнопкаHeightсвойства- значит вы используете
TemplateBindingдля справкиButton' sHeightне называя его![]()
Eren Ersönmenz уже объяснил это довольно хорошо, но я хотел бы дать ему другую перспективу, чтобы лучше понять концепцию.
в WPF каждый элемент управления более или менее отделен от его представления. Вы всегда можете изменить шаблон и сделать его выглядеть совершенно иначе. Кнопка работает, как ожидалось с
ControlTemplateсостоит только изRectangleнапример. Теперь иногда это необходимо дляControlTemplateфактически использовать свойства логической части a управление. И вот чтоTemplateBinding- это просто говоритControlTemplate"используйте это свойство элемента управления, который мы даем визуальное представление". Хорошим примером являетсяBackgroundсвойство на каждом элементе управления, оно не имеет никакого значения само по себе, оно получает свое значение поTemplateBindingэто дочерний контроль вControlTemplate.привязка сама по себе очень хорошо описано в MSDN. этой это очень хороший шпаргалка, которая на самом деле висит на моей стене прямо рядом со мной. Это дает хороший обзор всех различных доступных Привязок.
С TemplateBinding Расширение Разметки,
TemplateBindingсвязывает значение свойства в шаблоне элемента управления со значением другого открытого свойства в шаблонном элементе управления. Другими словами, это для привязки значений в шаблон.обязательные соединяет свойство целей привязки и источников данных.

Comments