Что такое привязка шаблона против привязки?



Я не мог понять 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>


также, Пожалуйста, объясните другие типы привязки.

555   4  

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 ' s Height не называя егоenter image description here

Eren Ersönmenz уже объяснил это довольно хорошо, но я хотел бы дать ему другую перспективу, чтобы лучше понять концепцию.

в WPF каждый элемент управления более или менее отделен от его представления. Вы всегда можете изменить шаблон и сделать его выглядеть совершенно иначе. Кнопка работает, как ожидалось с ControlTemplate состоит только из Rectangle например. Теперь иногда это необходимо для ControlTemplate фактически использовать свойства логической части a управление. И вот что TemplateBinding - это просто говорит ControlTemplate "используйте это свойство элемента управления, который мы даем визуальное представление". Хорошим примером является Background свойство на каждом элементе управления, оно не имеет никакого значения само по себе, оно получает свое значение по TemplateBinding это дочерний контроль в ControlTemplate.

привязка сама по себе очень хорошо описано в MSDN. этой это очень хороший шпаргалка, которая на самом деле висит на моей стене прямо рядом со мной. Это дает хороший обзор всех различных доступных Привязок.

С TemplateBinding Расширение Разметки,TemplateBinding связывает значение свойства в шаблоне элемента управления со значением другого открытого свойства в шаблонном элементе управления. Другими словами, это для привязки значений в шаблон.

обязательные соединяет свойство целей привязки и источников данных.

Comments

    Ничего не найдено.