{TemplateBinding} rozszerzenie znaczników

Łączy wartość właściwości w szablonie kontrolki z wartością innej uwidocznionej właściwości w kontrolce szablonu. TemplateBinding można stosować tylko w definicji ControlTemplate w języku XAML.

Użycie atrybutu XAML

<object propertyName="{TemplateBinding sourceProperty}" .../>

Użycie atrybutów XAML (dla właściwości Setter w szablonie lub stylu)

<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>

Wartości XAML

Termin Description
propertyName Nazwa właściwości ustawianej w składni ustawiającej. Musi to być właściwość zależności.
sourceProperty Nazwa innej właściwości zależności, która istnieje na typie, który jest szablonowany.

Remarks

Używanie szablonu TemplateBinding jest podstawową częścią sposobu definiowania szablonu kontrolki, jeśli jesteś autorem niestandardowej kontrolki lub jeśli zastępujesz szablon kontrolki dla istniejących kontrolek. Aby uzyskać więcej informacji, zobacz Szablony kontrolek.

Często zdarza się, że właściwości propertyName i targetProperty używają tej samej nazwy właściwości. W takim przypadku kontrolka może zdefiniować u siebie właściwość i przekazywać ją do istniejącej, intuicyjnie nazwanej właściwości jednego ze swoich elementów składowych. Na przykład kontrolka zawierająca element TextBlock w jego komposiowaniu, który jest używany do wyświetlania własnej właściwości Text kontrolki, może zawierać ten kod XAML jako część szablonu kontrolki: <TextBlock Text="{TemplateBinding Text}" .... />

Typy używane jako wartość właściwości źródłowej i właściwość docelowa muszą być zgodne. Nie ma możliwości użycia konwertera podczas używania TemplateBinding. Niepowodzenie dopasowania wartości powoduje błąd podczas analizowania kodu XAML. Jeśli potrzebujesz konwertera, możesz użyć rozszerzonej składni wiązania szablonu, na przykład: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}

Próba użycia elementu TemplateBinding poza definicją ControlTemplate w języku XAML spowoduje błąd analizatora.

Można użyć TemplateBinding w przypadkach, gdy wartość elementu nadrzędnego szablonu jest również odroczona w postaci innego powiązania. Obliczenie dla TemplateBinding może zaczekać, aż wymagane powiązania środowiska uruchomieniowego uzyskają wartości.

TemplateBinding to zawsze wiązanie jednokierunkowe. Obie zaangażowane właściwości muszą być właściwościami zależności.

TemplateBinding to rozszerzenie znaczników. Rozszerzenia znaczników są zwykle implementowane, gdy istnieje potrzeba zmiany wartości atrybutów na inne niż wartości literalne lub nazwy procedur obsługujących, a potrzeba jest bardziej globalna, niż tylko stosowanie konwerterów typów dla określonych typów lub właściwości. Wszystkie rozszerzenia znaczników w języku XAML używają znaków "{" i "}" w składni atrybutu, która jest konwencją, zgodnie z którą procesor XAML rozpoznaje, że rozszerzenie znaczników musi przetworzyć atrybut.

Uwaga W implementacji procesora XAML środowiska środowisko wykonawcze systemu Windows nie istnieje odpowiadająca mu reprezentacja klasy dla TemplateBinding. TemplateBinding jest przeznaczony wyłącznie do użycia w znacznikach XAML. Nie ma prostego sposobu odtworzenia zachowania w kodzie.

x:Bind in ControlTemplate

Note

Użycie rozszerzenia x:Bind w kontrolce ControlTemplate wymaga Windows 10 w wersji 1809 (SDK 17763) lub nowszej. Aby uzyskać więcej informacji na temat wersji docelowych, zobacz Wersja kodu adaptacyjnego.

Począwszy od systemu Windows 10 w wersji 1809 można używać rozszerzenia znaczników x:Bind wszędzie tam, gdzie w elemencie ControlTemplate używasz elementu TemplateBinding.

Właściwość TargetType jest wymagana (nie jest opcjonalna) w kontrolce ControlTemplate w przypadku używania elementu x:Bind.

Dzięki obsłudze x:Bind można używać zarówno powiązań funkcji , jak i powiązań dwukierunkowych w kontrolce ControlTemplate.

W tym przykładzie właściwość TextBlock.Text zwraca wartość Button.Content.ToString. Element TargetType w kontrolce ControlTemplate działa jako źródło danych i osiąga ten sam wynik co element TemplateBinding do elementu nadrzędnego.

<ControlTemplate TargetType="Button">
    <Grid>
        <TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
    </Grid>
</ControlTemplate>