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

Author: dowhilefor, 2012-05-15

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 ).
 165
Author: Eren Ersönmez,
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 i Height właściwość
  • nadpisujesz ControlTemplate Właściwość Button pisząc własną (na przykład chcesz utworzyć Ellipse - wyglądający przycisk zamiast Rectangle - wyglądający)
  • Po zrobieniu Ellipse w nowym ControlTemplate, chcesz, aby Ellipse był tego samego rozmiaru, co oryginalny Button 'S Height property
  • więc używasz TemplateBinding, aby odwoływać się do Button's Height bez nazywania goTutaj wpisz opis obrazka
 38
Author: Bad,
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.

 31
Author: dowhilefor,
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.

 5
Author: Zabavsky,
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