Вопрос по wpf, mvvm-light – Что такое привязка шаблона к привязке?

102

я не мог понятьBorderThickness="{TemplateBinding BorderThickness}. Here the code:

<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>

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

@Euphoric эта страница, кажется, первый результат Google по этому запросу. ;) ANeves
почему этот возврат и почему BorderThickness пишут два раза "quot; BorderThickness =" TemplateBinding BorderThickness} "quot;" prjndhi

Ваш Ответ

4   ответа
5

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

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

176

елении шаблона. В вашем примере вы могли бы написать

 <Border Padding="{Binding Padding}" ...>

смысл связывать свойство padding границы со свойством padding объекта ...what? Вы бы хотели сказать, "свойство padding элемента управления, для которого используется этот шаблон". Вы не можете дать ему имя, потому что вы не знаете x: Name элемента управления в это время (даже если бы вы знали, он не будет работать, потому что он находится в другой области имен). Тем не менее, вы можете сделать это, определив относительный источник

<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>

или используйте TemplateBinding, который является ярлыком (*) для выше

<Border Padding="{TemplateBinding Padding}" ...>

(*) В дополнение к тому, что TemplateBinding имеет меньше подробностей в этих шаблонных сценариях, он имеет несколько отличий от обычной привязки:

It is evaluated at compile-time. (if, for example, Padding property didn't exist, you would get a compile error. But if you were to use a binding with TemplatedParent, you would only see the error at runtime.) It is always a one-way binding. It requires that both the source and target properties are dependency properties. It has much less functionality (no StringFormat, Delay, IsAsync, etc.. see the properties of Binding vs TemplateBindingExtention).
32

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

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

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

43

https://www.youtube.com/watch?v=z-0TZR-7xLI

EDIT: Пример:

A Button has a default ControlTemplate property and Height property You override ControlTemplate property of a Button by writing your own (for example you want to make an Ellipse-looking button instead of Rectangle-looking) After you made an Ellipse in your new ControlTemplate, you want the Ellipse to be the same size as original Button's Height property So you use TemplateBinding in order to reference Button's Height without naming itenter image description here
Хотя это может теоретически ответить на вопрос,it would be preferable включить основные части ответа здесь и предоставить ссылку для справки.

Похожие вопросы