Udostępnij przez


Rozszerzenie {RelativeSource} znaczników

Zapewnia metodę określania źródła powiązania pod względem relacji względnej na wykresie obiektu czasu wykonywania.

Użycie atrybutów XAML (tryb własny)

<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>

Użycie atrybutów XAML (tryb SzablonowanyRodzic)

<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>

Wartości XAML

Termin Description
{RelativeSource Self} Tworzy wartość Mode o wartości Self. Element docelowy powinien być używany jako źródło tego powiązania. Jest to przydatne w przypadku powiązania jednej właściwości elementu z inną właściwością tego samego elementu.
{RelativeSource TemplatedParent} Tworzy ControlTemplate, który jest stosowany jako źródło dla tego powiązania. Jest to przydatne w przypadku stosowania informacji środowiska uruchomieniowego do powiązań na poziomie szablonu.

Uwagi

Powiązanie może ustawić właściwość Binding.RelativeSource jako atrybut elementu obiektu Binding lub jako składnik w rozszerzeniu znaczników {Binding}. Dlatego są wyświetlane dwie różne składnie XAML.

Właściwość RelativeSource jest podobna do rozszerzenia znaczników {Binding}. Jest to rozszerzenie znaczników, które jest w stanie zwracać własne instancje i obsługuje konstrukcję opartą na ciągach znaków, co właściwie przekazuje argument do konstruktora. W takim przypadku przekazywany argument jest wartością Tryb .

Tryb self jest przydatny do powiązania jednej właściwości elementu z inną właściwością w tym samym elemencie i jest odmianą powiązania ElementName , ale nie wymaga nazewnictwa, a następnie odwoływania się do elementu. Jeśli powiążesz jedną właściwość elementu z inną właściwością w tym samym elemencie, właściwości muszą używać tego samego typu właściwości lub należy również użyć konwertera w powiązaniu, aby przekonwertować wartości. Na przykład, można użyć Height jako źródła dla Szerokość bez konwersji, ale potrzebny jest konwerter do użycia IsEnabled jako źródła dla Visibility.

Oto przykład. Ten prostokąt używa rozszerzenia znaczników {Binding} , dzięki czemu jego wysokość i szerokość są zawsze równe i są renderowane jako kwadrat. Tylko wysokość jest ustawiana jako stała wartość. Dla tego prostokąta domyślny element DataContext ma wartość null, a nie jest to. Dlatego aby ustanowić źródło kontekstu danych jako sam obiekt (i włączyć powiązanie z innymi właściwościami), używamy argumentu RelativeSource={RelativeSource Self} w użyciu rozszerzenia znaczników {Binding}.

<Rectangle
  Fill="Orange" Width="200"
  Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>

Innym zastosowaniem RelativeSource={RelativeSource Self} jest ustawienie DataContext obiektu względem niego samego. Na przykład, ta technika może być widoczna w niektórych przykładach zestawu SDK, w których klasa Page została rozszerzona o właściwość niestandardową, która już udostępnia gotowy do użycia model widoku dla własnego powiązania danych, takiego jak: <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

Uwaga Użycie XAML dla RelativeSource pokazuje tylko sposób, w jakim jest przeznaczone: ustawienie wartości dla Binding.RelativeSource w XAML jako część wyrażenia powiązania. Teoretycznie inne zastosowania są możliwe w przypadku ustawienia właściwości, w której wartość to RelativeSource.