Co to jest Wiązanie szablonu a wiązanie?
Nie mogłem zrozumieć BorderThickness="{TemplateBinding BorderThickness}
.
Tutaj kod:
<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>
Proszę również wyjaśnić inne rodzaje wiązań.
4 answers
TemplateBinding jest używany do powiązania z właściwościami elementu w definicji szablonu. W twoim przykładzie mogłeś napisać
<Border Padding="{Binding Padding}" ...>
Oznacza powiązanie właściwości padding obramowania z właściwością padding of... Co? chciałbyś powiedzieć: "właściwość padding kontrolki, do której ten szablon jest używany."Nie możesz nadać mu nazwy, ponieważ nie znasz x:Nazwa kontroli w tym czasie (nawet jeśli to zrobiłeś, to nie zadziała, ponieważ jego w innym namescope). Można to jednak zrobić, definiując względne źródło
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
Lub użyj TemplateBinding, który jest skrótem (*) dla powyższego
<Border Padding="{TemplateBinding Padding}" ...>
(*) oprócz tego, że jest mniej gadatliwy w tych scenariuszach TemplateBinding ma kilka różnic w porównaniu do zwykłego wiązania:
- jest oceniany w czasie kompilacji. (jeśli na przykład właściwość Padding nie istnieje, pojawi się błąd kompilacji. Ale jeśli miałbyś użyć wiązania z TemplatedParent, błąd będzie widoczny tylko w czasie wykonywania.)
- jest to zawsze Wiązanie jednokierunkowe.
- wymaga, aby zarówno właściwości źródłowe, jak i docelowe były właściwościami zależności .
- ma znacznie mniejszą funkcjonalność (bez StringFormat, Delay, IsAsync, itp.. zobacz właściwości Binding vs TemplateBindingExtention ).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-10 14:53:18
Obraz jest wart 1000 słów. W tym przypadku jest to 7 minut wideo: https://www.youtube.com/watch?v=z-0TZR-7xLI
EDIT: Przykład:
- A
Button
ma domyślną WłaściwośćControlTemplate
iHeight
właściwość - nadpisujesz
ControlTemplate
WłaściwośćButton
pisząc własną (na przykład chcesz utworzyćEllipse
- wyglądający przycisk zamiastRectangle
- wyglądający) - Po zrobieniu
Ellipse
w nowymControlTemplate
, chcesz, abyEllipse
był tego samego rozmiaru, co oryginalny Button 'SHeight
property - więc używasz
TemplateBinding
, aby odwoływać się doButton
'sHeight
bez nazywania go
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-24 11:55:17
Eren Ersönmenz już wyjaśnił to całkiem dobrze, ale chciałbym dać mu inną perspektywę, aby lepiej zrozumieć to pojęcie.
W WPF każda kontrola jest mniej lub bardziej oderwana od swojej prezentacji. Zawsze możesz zmienić szablon sterowania i sprawić, że będzie wyglądał zupełnie inaczej. Przycisk działa zgodnie z oczekiwaniami z ControlTemplate
tylko składający się z Rectangle
na przykład. Teraz czasami konieczne jest, aby ControlTemplate
faktycznie użyła właściwości części logicznej kontrolki. Oraz to jest to, co TemplateBinding
po prostu mówi ControlTemplate
"użyj tej właściwości sterowania, którą dajemy wizualną prezentację".
Dobrym przykładem jest właściwość Background
na każdej kontroli, ona sama nie ma znaczenia, otrzymuje swoje znaczenie przez {[3] } to do kontroli potomka w ControlTemplate
.
Wiązanie samo w sobie jest bardzo dobre opisane w MSDN. Ten to bardzo ładna Ściągawka, która w rzeczywistości wisi na mojej ścianie tuż obok mnie. Daje dobry przegląd wszystkich różnych wiązań dostępny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 09:33:57
From TemplateBinding markup Extension, TemplateBinding
łączy wartość właściwości w szablonie kontrolki z wartością innej eksponowanej właściwości w szablonie kontrolki. Innymi słowy, służy do wiązania wartości w szablonie.
Binding łączy właściwość wiążących celów i źródeł danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 12:05:59