RelativeSource MarkupExtension
Określa właściwości RelativeSource źródła powiązania, które ma być używane w rozszerzeniu znaczników powiązania lub podczas ustawiania RelativeSource właściwości elementu ustanowionego Binding w języku XAML.
Użycie atrybutu języka XAML
<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />
Użycie atrybutu języka XAML (zagnieżdżonego w rozszerzeniu Binding)
<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />
Użycie elementu obiektu języka XAML
<Binding>
<Binding.RelativeSource>
<RelativeSource Mode="modeEnumValue"/>
</Binding.RelativeSource>
</Binding>
— lub —
<Binding>
<Binding.RelativeSource>
<RelativeSource
Mode="FindAncestor"
AncestorType="{x:Type typeName}"
AncestorLevel="intLevel"
/>
</Binding.RelativeSource>
</Binding>
Wartości XAML
Wartość | Opis |
---|---|
modeEnumValue |
Jedna z następujących: - Token Self ciągu ; odpowiada RelativeSource elementowi utworzonemu za pomocą właściwości Mode ustawionej na Selfwartość .- Token TemplatedParent ciągu ; odpowiada RelativeSource elementowi utworzonemu za pomocą właściwości Mode ustawionej na TemplatedParentwartość .- Token PreviousData ciągu ; odpowiada RelativeSource elementowi utworzonemu za pomocą właściwości Mode ustawionej na PreviousDatawartość .- Zobacz poniżej, aby uzyskać informacje na FindAncestor temat trybu. |
FindAncestor |
Token FindAncestor ciągu . Użycie tego tokenu powoduje wprowadzenie trybu, w którym RelativeSource określa typ przodka i opcjonalnie poziom przodka. Odpowiada to obiektowi utworzonemu RelativeSource za pomocą właściwości Mode ustawionej na FindAncestorwartość . |
typeName |
Wymagany dla FindAncestor trybu. Nazwa typu, który wypełnia AncestorType właściwość . |
intLevel |
Opcjonalnie dla FindAncestor trybu. Poziom elementu nadrzędnego (patrząc w kierunku nadrzędności w drzewie logicznym). |
Uwagi
{RelativeSource TemplatedParent}
Użycie powiązań to kluczowa technika, która odpowiada większej koncepcji rozdzielenia interfejsu użytkownika kontrolki i logiki kontrolki. Umożliwia tworzenie powiązań z wewnątrz definicji szablonu do elementu nadrzędnego używającego szablonu (tzn. do wystąpienia obiektu, do którego w czasie wykonywania szablon jest stosowany). W tym przypadku rozszerzenie znaczników TemplateBinding jest w rzeczywistości skrótem dla następującego wyrażenia powiązania: {Binding RelativeSource={RelativeSource TemplatedParent}}
. TemplateBinding
lub {RelativeSource TemplatedParent}
użycie są istotne tylko w języku XAML, który definiuje szablon. Aby uzyskać więcej informacji, zobacz TemplateBinding Markup Extension (Rozszerzenie znaczników TemplateBinding).
{RelativeSource FindAncestor}
jest używany głównie w szablonach kontrolek lub przewidywalnych samodzielnych kompozycjach interfejsu użytkownika, w przypadkach, gdy kontrolka zawsze powinna znajdować się w drzewie wizualnym określonego typu przodka. Na przykład elementy kontrolki elementy mogą używać FindAncestor
użycia do powiązania z właściwościami elementów kontrolującym nadrzędny element. Lub elementy, które są częścią kompozycji kontrolek w szablonie, mogą używać FindAncestor
powiązań do elementów nadrzędnych w tej samej strukturze kompozycji.
W składni elementu obiektu dla FindAncestor
trybu pokazanego w sekcjach Składnia XAML druga składnia elementu obiektu jest używana specjalnie dla FindAncestor
trybu. FindAncestor
tryb wymaga AncestorType wartości. Musisz ustawić AncestorType jako atrybut przy użyciu odwołania x:Type Markup Extension do typu obiektu ancestor do wyszukania. Wartość AncestorType jest używana, gdy żądanie powiązania jest przetwarzane w czasie wykonywania.
W przypadku FindAncestor
trybu właściwość AncestorLevel opcjonalna może pomóc w uściślaniu wyszukiwania przodków w przypadkach, gdy istnieje prawdopodobnie więcej niż jeden element nadrzędny tego typu w drzewie elementów.
Aby uzyskać więcej informacji na temat korzystania z FindAncestor
trybu, zobacz RelativeSource.
{RelativeSource Self}
jest przydatna w scenariuszach, w których jedna właściwość wystąpienia powinna zależeć od wartości innej właściwości tego samego wystąpienia, a żadna ogólna relacja właściwości zależności (na przykład przymus) już istnieje między tymi dwiema właściwościami. Chociaż rzadko istnieją dwie właściwości obiektu, tak aby wartości są dosłownie identyczne (i są identyczne), można również zastosować Converter
parametr do powiązania, które ma {RelativeSource Self}
, i użyć konwertera do konwersji między typami źródłowymi i docelowymi. Innym scenariuszem MultiDataTriggerdla {RelativeSource Self}
programu jest element .
Na przykład następujący kod XAML definiuje Rectangle element tak, aby niezależnie od tego, jaka wartość została wprowadzona dla Widthelementu , Rectangle jest zawsze kwadratem: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>
{RelativeSource PreviousData}
jest przydatna w szablonach danych lub w przypadkach, gdy powiązania używają kolekcji jako źródła danych. {RelativeSource PreviousData}
Służy do wyróżniania relacji między sąsiednimi elementami danych w kolekcji. Powiązana technika polega na ustanowieniu MultiBinding między bieżącymi i poprzednimi elementami w źródle danych, a użycie konwertera dla tego powiązania w celu określenia różnicy między dwoma elementami i ich właściwościami.
W poniższym przykładzie pierwszy TextBlock w szablonie elementów wyświetla bieżącą liczbę. Drugie TextBlock powiązanie to, MultiBinding które nominalnie ma dwa Binding składniki: bieżący rekord i powiązanie, które celowo używa poprzedniego rekordu danych za pomocą polecenia {RelativeSource PreviousData}
. Następnie konwerter na obiekcie MultiBinding oblicza różnicę i zwraca go do powiązania.
<ListBox Name="fibolist">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"/>
<TextBlock>, difference = </TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DiffConverter}">
<Binding/>
<Binding RelativeSource="{RelativeSource PreviousData}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Opis powiązania danych jako pojęcia nie został omówiony w tym miejscu, zobacz Omówienie powiązania danych.
W implementacji procesora WPF XAML obsługa tego rozszerzenia znaczników jest definiowana przez klasę RelativeSource .
RelativeSource
to rozszerzenie znaczników. Rozszerzenia znaczników są zazwyczaj implementowane w sytuacji, gdy istnieje wymóg, aby wartości atrybutów były wyprowadzane w postaci innej niż wartości literałów lub nazwy programów obsługi, a wymóg ma charakter bardziej globalny niż zwykłe umieszczenie konwerterów typów w niektórych typach lub właściwościach. Wszystkie rozszerzenia znaczników w języku XAML używają {
znaków i }
w ich składni atrybutu, która jest konwencją, zgodnie z którą procesor XAML rozpoznaje, że rozszerzenie znaczników musi przetworzyć atrybut. Aby uzyskać więcej informacji, zobacz Rozszerzenia znaczników i WPF XAML.
Zobacz też
.NET Desktop feedback