RelativeSource-MarkuperweiterungRelativeSource MarkupExtension

Gibt Eigenschaften einer RelativeSource Bindungs Quelle an, die innerhalb einer Bindungs Markup Erweiterungverwendet werden sollen, oder, wenn die RelativeSource-Eigenschaft eines Binding Elements festgelegt wird, das in XAML festgelegt wurde.Specifies properties of a RelativeSource binding source, to be used within a Binding Markup Extension, or when setting the RelativeSource property of a Binding element established in XAML.

Verwendung von XAML-AttributenXAML Attribute Usage

<Binding RelativeSource="{RelativeSource modeEnumValue}" .../>

XAML-Attributverwendung (geschachtelt innerhalb der Bindungserweiterung)XAML Attribute Usage (nested within Binding extension)

<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" .../>

Verwendung von XAML-ObjektelementenXAML Object Element Usage

<Binding>
  <Binding.RelativeSource>
    <RelativeSource Mode="modeEnumValue"/>
  </Binding.RelativeSource>
</Binding>

- oder --or-

<Binding>
  <Binding.RelativeSource>
    <RelativeSource
      Mode="FindAncestor"
      AncestorType="{x:Type typeName}"
      AncestorLevel="intLevel"
    />
  </Binding.RelativeSource>
</Binding>

XAML-WerteXAML Values

modeEnumValue Eine der folgenden Komponenten:One of the following:

-Das Zeichen folgen Token Self; entspricht einer RelativeSource, die erstellt wird, wobei die Mode-Eigenschaft auf Selffestgelegt ist.- The string token Self; corresponds to a RelativeSource as created with its Mode property set to Self.
-Das Zeichen folgen Token TemplatedParent; entspricht einer RelativeSource, die erstellt wird, wobei die Mode-Eigenschaft auf TemplatedParentfestgelegt ist.- The string token TemplatedParent; corresponds to a RelativeSource as created with its Mode property set to TemplatedParent.
-Das Zeichen folgen Token PreviousData; entspricht einer RelativeSource, die erstellt wird, wobei die Mode-Eigenschaft auf PreviousDatafestgelegt ist.- The string token PreviousData; corresponds to a RelativeSource as created with its Mode property set to PreviousData.
-Weitere Informationen zum FindAncestor Modus finden Sie unten.- See below for information on FindAncestor mode.
FindAncestor Die Tokenzeichenfolge FindAncestor.The string token FindAncestor. Bei Verwendung dieses Tokens wird ein Modus aktiviert, in dem eine RelativeSource einen Vorgängertyp und optional eine Vorgängerebene angibt.Using this token enters a mode whereby a RelativeSource specifies an ancestor type and optionally an ancestor level. Dies entspricht einer RelativeSource, die mit einer auf Mode festgelegten FindAncestor-Eigenschaft erstellt wurde.This corresponds to a RelativeSource as created with its Mode property set to FindAncestor.
typeName Erforderlich für FindAncestor-Modus.Required for FindAncestor mode. Der Name eines Typs, der die AncestorType-Eigenschaft auffüllt.The name of a type, which fills the AncestorType property.
intLevel Optional für FindAncestor-Modus.Optional for FindAncestor mode. Eine Vorgängerebene (ausgewertet bezüglich der übergeordneten Richtung in der logischen Struktur).An ancestor level (evaluated towards the parent direction in the logical tree).

HinweiseRemarks

{RelativeSource TemplatedParent} Bindungs Verwendungen sind eine wichtige Technik, die ein größeres Konzept der Trennung der Benutzeroberfläche eines Steuer Elements und der Logik eines Steuer Elements adressiert.{RelativeSource TemplatedParent} binding usages are a key technique that addresses a larger concept of the separation of a control's UI and a control's logic. Dies ermöglicht die Bindung aus der Vorlagendefinition mit dem vorlagenbasierten übergeordneten Element (der Laufzeitobjektinstanz, in der die Vorlage angewendet wird).This enables binding from within the template definition to the templated parent (the run time object instance where the template is applied). In diesem Fall ist die TemplateBinding-Markup Erweiterung tatsächlich eine Kurzform für den folgenden Bindungs Ausdruck: {Binding RelativeSource={RelativeSource TemplatedParent}}.For this case, the TemplateBinding Markup Extension is in fact a shorthand for the following binding expression: {Binding RelativeSource={RelativeSource TemplatedParent}}. TemplateBinding-oder {RelativeSource TemplatedParent} Verwendungen sind sowohl innerhalb des XAML-Codes, der eine Vorlage definiert, nicht relevant.TemplateBinding or {RelativeSource TemplatedParent} usages are both only relevant within the XAML that defines a template. Weitere Informationen finden Sie unter TemplateBinding-Markup Erweiterung.For more information, see TemplateBinding Markup Extension.

{RelativeSource FindAncestor} wird hauptsächlich in Steuerelement Vorlagen oder vorhersagbaren eigenständigen UI-Kompositionen verwendet, in Fällen, in denen ein Steuerelement immer in einer visuellen Struktur eines bestimmten Vorgänger Typs zu erwarten ist.{RelativeSource FindAncestor} is mainly used in control templates or predictable self-contained UI compositions, for cases where a control is always expected to be in a visual tree of a certain ancestor type. Beispielsweise können Elemente eines Elementsteuerelements FindAncestor-Verwendungen zum Binden an Eigenschaften des übergeordneten Vorgängers des Elementsteuerelements verwenden.For example, items of an items control might use FindAncestor usages to bind to properties of their items control parent ancestor. Oder Elemente, die Teil der Steuerelementzusammensetzung in einer Vorlage sind, können FindAncestor-Bindungen mit übergeordneten Elemente in derselben Kompositionsstruktur verwenden.Or, elements that are part of control composition in a template can use FindAncestor bindings to the parent elements in that same composition structure.

In der Objektelementsyntax für den FindAncestor-Modus, wie in den XAML-Syntaxabschnitten dargestellt, wird die zweite Objektelementsyntax speziell für den FindAncestor-Modus verwendet.In the object element syntax for FindAncestor mode shown in the XAML Syntax sections, the second object element syntax is used specifically for FindAncestor mode. Der FindAncestor-Modus erfordert einen AncestorType-Wert.FindAncestor mode requires an AncestorType value. Sie müssen AncestorType als Attribut festlegen, indem Sie einen x:Type-Markup Erweiterungs Verweis auf den Typ des übergeordneten Elements festlegen, nach dem gesucht werden soll.You must set AncestorType as an attribute using an x:Type Markup Extension reference to the type of ancestor to look for. Der AncestorType-Wert wird verwendet, wenn die Bindungsanforderung zur Laufzeit verarbeitet wird.The AncestorType value is used when the binding request is processed at run-time.

Im FindAncestor-Modus kann die optionale Eigenschaft AncestorLevel dazu beitragen, die Vorgängersuche in den Fällen eindeutig zu machen, in denen eventuell mehr als ein Vorgänger dieses Typs in der Elementstruktur vorhanden ist.For FindAncestor mode, the optional property AncestorLevel can help disambiguate the ancestor lookup in cases where there is possibly more than one ancestor of that type existing in the element tree.

Weitere Informationen zur Verwendung des FindAncestor-Modus finden Sie unter RelativeSource.For more information on how to use the FindAncestor mode, see RelativeSource.

{RelativeSource Self} ist für Szenarien nützlich, in denen eine Eigenschaft einer Instanz von dem Wert einer anderen Eigenschaft derselben Instanz abhängen sollte und keine allgemeine Beziehung der Abhängigkeits Eigenschaft (z. b. Umwandlung) zwischen diesen beiden Eigenschaften vorhanden ist.{RelativeSource Self} is useful for scenarios where one property of an instance should depend on the value of another property of the same instance, and no general dependency property relationship (such as coercion) already exists between those two properties. Obwohl es selten vorkommt, dass zwei Eigenschaften für ein Objekt vorhanden sind, sodass die Werte buchstäblich identisch sind (und identisch typisiert sind), können Sie auch einen Converter Parameter auf eine Bindung anwenden, die über {RelativeSource Self}verfügt, und den Konverter verwenden, um zwischen Quell-und Zieltyp zu konvertieren.Although it is rare that two properties exist on an object such that the values are literally identical (and are identically typed), you can also apply a Converter parameter to a binding that has {RelativeSource Self}, and use the converter to convert between source and target types. Ein anderes Szenario für {RelativeSource Self} ist als Teil einer MultiDataTrigger.Another scenario for {RelativeSource Self} is as part of a MultiDataTrigger.

Beispielsweise definiert der folgende XAML-Code ein Rectangle-Element so, dass unabhängig davon, welcher Wert für Width eingegeben wird, Rectangle immer ein Quadrat ist: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>For example, the following XAML defines a Rectangle element such that no matter what value is entered for Width, the Rectangle is always a square: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>

{RelativeSource PreviousData} ist entweder in Datenvorlagen oder in Fällen nützlich, in denen Bindungen eine Auflistung als Datenquelle verwenden.{RelativeSource PreviousData} is useful either in data templates, or in cases where bindings are using a collection as the data source. Mit {RelativeSource PreviousData} können Sie Beziehungen zwischen benachbarten Datenelementen in der Auflistung hervorheben.You can use {RelativeSource PreviousData} to highlight relationships between adjacent data items in the collection. Eine verwandte Methode besteht darin, eine MultiBinding zwischen dem aktuellen und vorherigen Element in der Datenquelle herzustellen und mit einem Konverter für diese Bindung die Differenz zwischen den beiden Elementen und deren Eigenschaften zu ermitteln.A related technique is to establish a MultiBinding between the current and previous items in the data source, and use a converter on that binding to determine the difference between the two items and their properties.

Im folgenden Beispiel zeigt der erste TextBlock in der Elementvorlage die aktuelle Zahl an.In the following example, the first TextBlock in the items template displays the current number. Die zweite TextBlock Bindung ist ein MultiBinding, der nominale zwei Binding-Bestandteile hat: der aktuelle Datensatz und eine Bindung, die den vorherigen Datensatz absichtlich mithilfe {RelativeSource PreviousData}verwendet.The second TextBlock binding is a MultiBinding that nominally has two Binding constituents: the current record, and a binding that deliberately uses the previous data record by using {RelativeSource PreviousData}. Anschließend berechnet ein Konverter in der MultiBinding den Unterschied und gibt ihn an die Bindung zurück.Then, a converter on the MultiBinding calculates the difference and returns it to the binding.

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

Die Beschreibung der Datenbindung als Konzept wird hier nicht behandelt. Informationen hierzu finden Sie unter Übersicht über die Datenbindung.Describing data binding as a concept is not covered here, see Data Binding Overview.

In der WPFWPF XAML-Prozessor Implementierung wird die Handhabung dieser Markup Erweiterung durch die RelativeSource-Klasse definiert.In the WPFWPF XAML processor implementation, the handling for this markup extension is defined by the RelativeSource class.

RelativeSource ist eine Markuperweiterung.RelativeSource is a markup extension. Markuperweiterungen werden in der Regel implementiert, wenn Attributwerte mit Escapezeichen versehen werden müssen, damit diese nicht als literale Werte oder als Handlernamen betrachtet werden, und diese Anforderung eher global und nicht nur durch den Einsatz von Typkonvertern für bestimmte Typen oder Eigenschaften erfüllt werden soll.Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. Alle Markup Erweiterungen in XAML verwenden die {-und } Zeichen in der Attribut Syntax. Dies ist die Konvention, mit der ein XAML-Prozessor erkennt, dass das Attribut von einer Markup Erweiterung verarbeitet werden muss.All markup extensions in XAML use the { and } characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must process the attribute. Weitere Informationen finden Sie unter Markuperweiterungen und WPF-XAML.For more information, see Markup Extensions and WPF XAML.

Siehe auchSee also