Strukturen in WPFTrees in WPF

In vielen Technologien werden Elemente und Komponenten in einer Baumstruktur organisiert, in denen Entwickler die Objektknoten direkt in der Struktur bearbeiten, um das Rendering oder das Verhalten einer Anwendung zu beeinflussen.In many technologies, elements and components are organized in a tree structure where developers directly manipulate the object nodes in the tree to affect the rendering or behavior of an application. Außerdem verwendet Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) mehrere Baumstrukturmetaphern, um Beziehungen zwischen Programmelementen festzulegen.Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) also uses several tree structure metaphors to define relationships between program elements. Da die WPF-Entwickler meist eine Anwendung im Code erstellen können oder Teile der Anwendung in XAML festlegen, obwohl sie konzeptionell über die Baumstrukturobjektmetapher denken, rufen sie trotzdem eine bestimmte API auf oder verwenden bestimmte Markups, um dies zu tun, anstatt einige allgemeine API-Strukturobjektmanipulationen vorzunehmen, wie Sie sie möglicherweise im XML-DOM verwenden.For the most part WPF developers can create an application in code or define portions of the application in XAML while thinking conceptually about the object tree metaphor, but will be calling specific API or using specific markup to do so rather than some general object tree manipulation API such as you might use in XML DOM. WPF zeigt zwei hilfsprogrammklassen, die eine strukturmetapheransicht bereitstellen LogicalTreeHelper und VisualTreeHelper.WPF exposes two helper classes that provide a tree metaphor view, LogicalTreeHelper and VisualTreeHelper. Die Begriffe „visuelle Struktur“ und „logische Struktur“ werden auch in der WPF-Dokumentation verwendet, da diese Strukturen für das Verstehen des Verhaltens bestimmter WPF-Schlüsselfunktionen hilfreich sind.The terms visual tree and logical tree are also used in the WPF documentation because these same trees are useful for understanding the behavior of certain key WPF features. In diesem Thema definiert, was die visuelle Struktur und die logische Struktur darstellen, wird erläutert, wie sich diese Strukturen auf ein allgemeines Objektstrukturkonzept beziehen und führt LogicalTreeHelper und VisualTreeHelpers.This topic defines what the visual tree and logical tree represent, discusses how such trees relate to an overall object tree concept, and introduces LogicalTreeHelper and VisualTreeHelpers.

Strukturen in WPFTrees in WPF

Die umfassendste Struktur in WPFWPF ist die Objektstruktur.The most complete tree structure in WPFWPF is the object tree. Wenn Sie eine Anwendungsseite in XAMLXAML festlegen und anschließend XAMLXAML laden, wird die Baumstruktur basierend auf den Schachtelungsbeziehungen der Elemente im Markup erstellt.If you define an application page in XAMLXAML and then load the XAMLXAML, the tree structure is created based on the nesting relationships of the elements in the markup. Wenn Sie eine Anwendung oder einen Teil der Anwendung im Code festlegen, wird die Baumstruktur basierend darauf erstellt, wie Sie Eigenschaftswerte für Eigenschaften zuweisen, die das Inhaltsmodell für ein bestimmtes Objekt implementieren.If you define an application or a portion of the application in code, then the tree structure is created based on how you assign property values for properties that implement the content model for a given object. In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) gibt es zwei Möglichkeiten, wie die vollständige Objektstruktur konzipiert wird und an die öffentliche API gemeldet werden kann: Als logische Struktur und als visuelle Struktur.In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), there are two ways that the complete object tree is conceptualized and can be reported to its public API: as the logical tree and as the visual tree. Die Unterschiede zwischen logischer Struktur und visueller Struktur sind nicht immer unbedingt wichtig, aber sie können gelegentlich Probleme mit bestimmten WPFWPF-Subsystemen verursachen und Auswählen im Markup oder im Code beeinträchtigen.The distinctions between logical tree and visual tree are not always necessarily important, but they can occasionally cause issues with certain WPFWPF subsystems and affect choices you make in markup or code.

Obwohl Sie nicht immer die logische Struktur oder die visuelle Struktur direkt bearbeiten, ist das Verstehen der Konzepte, wie die Strukturen interagieren, nützlich, um WPF als eine Technologie zu verstehen.Even though you do not always manipulate either the logical tree or the visual tree directly, understanding the concepts of how the trees interact is useful for understanding WPF as a technology. Sich WPF als eine Baumstrukturmetapher vorzustellen, ist auch wichtig, um zu verstehen, wie Eigenschaftsvererbung und Ereignisrouting in WPFWPF funktionieren.Thinking of WPF as a tree metaphor of some kind is also crucial to understanding how property inheritance and event routing work in WPFWPF.

Hinweis

Da die Objektstruktur eher ein Konzept als eine tatsächliche API ist, ist es eine weitere Möglichkeit, sich das Konzept als Objektdiagramm vorzustellen.Because the object tree is more of a concept than an actual API, another way to think of the concept is as an object graph. In der Praxis gibt es Beziehungen zwischen Objekten während der Laufzeit, die die Baumstrukturmetapher aufschlüsseln können.In practice, there are relationships between objects at run time where the tree metaphor will break down. Trotzdem ist die Baumstrukturmetapher, insbesondere bei XAML-definierten Benutzeroberflächen, ausreichend relevant, sodass die meisten WPF-Dokumentationen den Begriff „Objektstruktur“ verwenden werden, wenn auf dieses allgemeine Konzept verwiesen wird.Nevertheless, particularly with XAML-defined UI, the tree metaphor is relevant enough that most WPF documentation will use the term object tree when referencing this general concept.

Die logische StrukturThe Logical Tree

In WPFWPF fügen Sie Inhalte zu Benutzeroberflächenelementen hinzu, indem Sie Eigenschaften der Objekte festlegen, die diese Elemente unterstützen.In WPFWPF, you add content to UI elements by setting properties of the objects that back those elements. Z. B. Elemente hinzugefügt eine ListBox Steuerelement durch Bearbeiten der Items Eigenschaft.For example, you add items to a ListBox control by manipulating its Items property. Auf diese Weise fügen Sie Elemente in der ItemCollection d. h. die Items -Eigenschaftswert.By doing this, you are placing items into the ItemCollection that is the Items property value. Auf ähnliche Weise zum Hinzufügen von Objekten auf einer DockPanel, Sie bearbeiten die Children -Eigenschaftswert.Similarly, to add objects to a DockPanel, you manipulate its Children property value. Hier ist Sie Objekte zum Hinzufügen der UIElementCollection.Here, you are adding objects to the UIElementCollection. Ein Codebeispiel finden Sie unter Vorgehensweise: Dynamisches Hinzufügen eines Elements.For a code example, see How to: Add an Element Dynamically.

In Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML), wenn Sie die Listenelemente in Platzieren einer ListBox oder Steuerelemente oder andere UI-Elemente in einer DockPanel, Sie auch verwenden, die Items und Children Eigenschaften entweder explizit oder implizit, wie im folgenden Beispiel.In Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML), when you place list items in a ListBox or controls or other UI elements in a DockPanel, you also use the Items and Children properties, either explicitly or implicitly, as in the following example.

<DockPanel
  Name="ParentElement"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  >
  <!--implicit: <DockPanel.Children>-->
  <ListBox DockPanel.Dock="Top">
    <!--implicit: <ListBox.Items>-->
    <ListBoxItem>
      <TextBlock>Dog</TextBlock>
    </ListBoxItem>
    <ListBoxItem>
      <TextBlock>Cat</TextBlock>
    </ListBoxItem>
    <ListBoxItem>
      <TextBlock>Fish</TextBlock>
    </ListBoxItem>
  <!--implicit: </ListBox.Items>-->
  </ListBox>
  <Button Height="20" Width="100" DockPanel.Dock="Top">Buy a Pet</Button>
  <!--implicit: </DockPanel.Children>-->
</DockPanel>

Wenn Sie diesen XAML-Code als XML unter einem Dokumentobjektmodell verarbeiten würden und die auskommentierten Tags als implizit eingeschlossen hätten (was zulässig gewesen wäre), hätte die entstandene XML-DOM-Struktur Elemente für <ListBox.Items> und für die anderen impliziten Elemente eingeschlossen.If you were to process this XAML as XML under a document object model, and if you had included the tags commented out as implicit (which would have been legal), then the resulting XML DOM tree would have included elements for <ListBox.Items> and the other implicit items. XAML verarbeitet jedoch nicht auf diese Weise, und wenn Sie das Markup lesen und in Objekte schreiben, enthält das daraus entstehende Objektdiagramm nicht wirklich ListBox.Items.But XAML does not process that way when you read the markup and write to objects, the resulting object graph does not literally include ListBox.Items. Es verfügt jedoch über eine ListBox Eigenschaft mit dem Namen Items , enthält eine ItemCollection, und dass ItemCollection wird initialisiert, aber leer sein, wenn die ListBox XAML verarbeitet wird.It does however have a ListBox property named Items that contains a ItemCollection, and that ItemCollection is initialized but empty when the ListBox XAML is processed. Klicken Sie dann jedes untergeordnete Objektelement, das als Inhalt vorhanden ist. die ListBox hinzugefügt wird die ItemCollection Parser Aufrufen von ItemCollection.Add.Then, each child object element that exists as content for the ListBox is added to the ItemCollection by parser calls to ItemCollection.Add. Dieses Beispiel über die Verarbeitung von XAML in einer Objektstruktur ist bisher scheinbar ein Beispiel, bei dem die erstellte Objektstruktur im Grunde die logische Struktur ist.This example of processing XAML into an object tree is so far seemingly an example where the created object tree is basically the logical tree.

Die logische Struktur ist jedoch nicht das gesamte Objektdiagramm, das für die Anwendungsbenutzeroberfläche zur Laufzeit vorhanden ist, dies gilt selbst wenn die impliziten XAML-Syntaxelemente nicht berücksichtigt werden. Der Hauptgrund dafür sind die visuellen Objekte und Vorlagen.However, the logical tree is not the entire object graph that exists for your application UI at run time, even with the XAML implicit syntax items factored out. The main reason for this is visuals and templates. Betrachten Sie beispielsweise die Button.For example, consider the Button. Die logische Struktur meldet die Button Objekt sowie die Zeichenfolge Content.The logical tree reports the Button object and also its string Content. Es gibt jedoch noch mehr zu dieser Schaltfläche in der Laufzeit-Objektstruktur.But there is more to this button in the run-time object tree. Insbesondere die Schaltfläche nur angezeigt, auf dem Bildschirm die Möglichkeit, weil eine bestimmte Button Steuerelementvorlage angewendet wurde.In particular, the button only appears on screen the way it does because a specific Button control template was applied. Die visuellen Elemente, die aus einer angewendeten Vorlage stammen (z. B. der Vorlage definierten Border dunkelgraue auf der visuellen Schaltfläche) werden nicht in der logischen Struktur gemeldet, auch wenn Sie auf der logischen Struktur während der Laufzeit suchen (z.B. zur Behandlung bei einem Eingabeereignis in der sichtbare Benutzeroberfläche und Lesen Sie dann auf der logischen Struktur).The visuals that come from an applied template (such as the template-defined Border of dark gray around the visual button) are not reported in the logical tree, even if you are looking at the logical tree during run time (such as handling an input event from the visible UI and then reading the logical tree). Sie müssten stattdessen die visuelle Struktur untersuchen, um die visuellen Vorlagen zu suchen.To find the template visuals, you would instead need to examine the visual tree.

Weitere Informationen dazu, wie die XAMLXAML-Syntax das erstellte Objektdiagramm sowie die implizite Syntax in XAML zuordnet, finden Sie unter Ausführliche Erläuterung der XAML-Syntax oder Übersicht über XAML (WPF).For more information about how XAMLXAML syntax maps to the created object graph, and implicit syntax in XAML, see XAML Syntax In Detail or XAML Overview (WPF).

Der Zweck der logischen StrukturThe Purpose of the Logical Tree

Die logische Struktur ist vorhanden, damit Inhaltsmodelle ihre potenziellen untergeordneten Objekte leicht durchlaufen können und damit Inhaltsmodelle erweiterbar sind.The logical tree exists so that content models can readily iterate over their possible child objects, and so that content models can be extensible. Darüber hinaus bietet die logische Struktur ein Framework für bestimmte Benachrichtigungen, z.B. wenn alle Objekte in der logischen Struktur geladen werden.Also, the logical tree provides a framework for certain notifications, such as when all objects in the logical tree are loaded. Im Grunde ist die logische Struktur eine Annäherung an ein Laufzeit-Objektdiagramm auf der Frameworkebene, das visuelle Elemente ausschließt, aber für viele Abfragevorgänge für Ihre eigene Laufzeit-Anwendungskomposition ausreichend ist.Basically, the logical tree is an approximation of a run time object graph at the framework level, which excludes visuals, but is adequate for many querying operations against your own run time application's composition.

Darüber hinaus werden sowohl statische und dynamische Ressourcenverweise durch Suchen nach oben durch die logische Struktur für aufgelöst Resources schemaauflistungen auf dem anfänglich Anforderungsobjekt weiterhin der logischen Struktur nach oben und jeden FrameworkElement (oder FrameworkContentElement) für eine andere Resources -Wert enthält einen ResourceDictionary, möglicherweise mit diesem Schlüssel.In addition, both static and dynamic resource references are resolved by looking upwards through the logical tree for Resources collections on the initial requesting object, and then continuing up the logical tree and checking each FrameworkElement (or FrameworkContentElement) for another Resources value that contains a ResourceDictionary, possibly containing that key. Die logische Struktur wird für die Ressourcensuche verwendet, wenn sowohl die logische Struktur als auch die visuelle Struktur vorhanden sind.The logical tree is used for resource lookup when both the logical tree and the visual tree are present. Weitere Informationen zu Ressourcenwörterbüchern und der Suche finden Sie unter XAML-Ressourcen.For more information on resource dictionaries and lookup, see XAML Resources.

Zusammensetzung der logischen StrukturComposition of the Logical Tree

Die logische Struktur wird auf der WPF-Frameworkebene, was bedeutet, dass das WPF-Basiselement, die relevantesten für Vorgänge der logischen Struktur ist entweder definiert FrameworkElement oder FrameworkContentElement.The logical tree is defined at the WPF framework-level, which means that the WPF base element that is most relevant for logical tree operations is either FrameworkElement or FrameworkContentElement. Sie können jedoch sehen, wenn Sie tatsächlich verwenden die LogicalTreeHelper -API enthält die logische Struktur manchmal Knoten, die nicht entweder FrameworkElement oder FrameworkContentElement.However, as you can see if you actually use the LogicalTreeHelper API, the logical tree sometimes contains nodes that are not either FrameworkElement or FrameworkContentElement. Die logische Struktur meldet die Text Wert eine TextBlock, dies ist eine Zeichenfolge.For instance, the logical tree reports the Text value of a TextBlock, which is a string.

Überschreiben der logischen StrukturOverriding the Logical Tree

Erfahrene Autoren von Steuerelementen können die logische Struktur überschreiben, indem Sie mehrere APIs, die definieren, wie ein allgemeines Objekt- oder Inhaltsmodell Objekte hinzufügt oder entfernt innerhalb der logischen Struktur überschreiben.Advanced control authors can override the logical tree by overriding several APIs that define how a general object or content model adds or removes objects within the logical tree. Ein Beispiel zum Überschreiben der logischen Struktur finden Sie unter Überschreiben der logischen Struktur.For an example of how to override the logical tree, see Override the Logical Tree.

Vererbung von EigenschaftswertenProperty Value Inheritance

Die Vererbung von Eigenschaftswerten funktioniert mithilfe einer Hybridstruktur.Property value inheritance operates through a hybrid tree. Die eigentlichen Metadaten, die enthält die Inherits Eigenschaft, die Vererbung von Eigenschaften ermöglichen, ist der WPF-Frameworkebene FrameworkPropertyMetadata Klasse.The actual metadata that contains the Inherits property that enables property inheritance is the WPF framework-level FrameworkPropertyMetadata class. Aus diesem Grund sowohl das übergeordnete Element, das den ursprünglichen Wert enthält, und das untergeordnete Objekt, das diesen Wert erbt müssen FrameworkElement oder FrameworkContentElement, außerdem müssen sie beide Teil einer logischen Struktur sein.Therefore, both the parent that holds the original value and the child object that inherits that value must both be FrameworkElement or FrameworkContentElement, and they must both be part of some logical tree. Allerdings kann für vorhandene WPF-Eigenschaften, die die Vererbung von Eigenschaften unterstützen, die Vererbung von Eigenschaftswerten durch ein beteiligtes Objekt aufrechterhalten werden, das nicht in der logischen Struktur ist.However, for existing WPF properties that support property inheritance, property value inheritance is able to perpetuate through an intervening object that is not in the logical tree. Dies ist vor allem relevant, wenn Vorlagenelemente alle geerbten Eigenschaftswerte verwenden, die entweder auf die Instanz festgelegt wurden, die als Vorlage verwendet wird, oder auf noch höheren Ebenen der Seitenebenen-Zusammensetzung und aus diesem Grund höher in der logischen Struktur sind.Mainly this is relevant for having template elements use any inherited property values set either on the instance that is templated, or at still higher levels of page-level composition and therefore higher in the logical tree. Damit die Vererbung von Eigenschaftswerten über eine solche Grenze hinweg konsistent funktioniert, muss die erbende Eigenschaft als angefügte Eigenschaft registriert werden, und Sie sollten dieses Muster befolgen, wenn Sie beabsichtigen, eine benutzerdefinierte Abhängigkeitseigenschaft mit Eigenschaftenvererbungsverhalten festzulegen.In order for property value inheritance to work consistently across such a boundary, the inheriting property must be registered as an attached property, and you should follow this pattern if you intend to define a custom dependency property with property inheritance behavior. Die genaue Struktur, die für die Vererbung von Eigenschaften verwendet wurde, kann nicht vollständig von einer Hilfsprogrammklassen-Dienstmethode vorhergesehen werden, dies gilt selbst während der Laufzeit.The exact tree used for property inheritance cannot be entirely anticipated by a helper class utility method, even at run time. Weitere Informationen finden Sie unter Vererbung von Eigenschaftswerten.For more information, see Property Value Inheritance.

Die visuelle StrukturThe Visual Tree

Neben dem Konzept der logischen Struktur, gibt es auch das Konzept der visuellen Struktur in WPFWPF.In addition to the concept of the logical tree, there is also the concept of the visual tree in WPFWPF. Die visuelle Struktur beschreibt die Struktur von visuellen Objekten, dargestellt durch die Visual Basisklasse.The visual tree describes the structure of visual objects, as represented by the Visual base class. Wenn Sie eine Vorlage für ein Steuerelement erstellen, werden Sie die visuelle Struktur festlegen oder neu festlegen, die für dieses Steuerelement angewendet wird.When you write a template for a control, you are defining or redefining the visual tree that applies for that control. Die visuelle Struktur ist auch für Entwickler interessant, die die Kontrolle über Zeichnungen auf niedrigerer Ebene aus Leistungs- und Optimierungsgründen möchten.The visual tree is also of interest to developers who want lower-level control over drawing for performance and optimization reasons. Eine Belichtung der visuellen Struktur als Teil der konventionellen WPFWPF-Programmierschnittstellen ist, dass das Ereignis für ein Routingereignis größtenteils entlang der visuellen Struktur steuert, nicht aber entlang der logischen Struktur.One exposure of the visual tree as part of conventional WPFWPF application programming is that event routes for a routed event mostly travel along the visual tree, not the logical tree. Diese Besonderheit des Routingereignisverhaltens ist möglicherweise nicht sofort erkennbar, es sei denn, Sie sind ein Autor des Steuerelements.This subtlety of routed event behavior might not be immediately apparent unless you are a control author. Routingereignisse über die visuelle Struktur ermöglichen Steuerelemente, die die Komposition auf der visuellen Ebene implementieren, um Ereignisse zu bearbeiten oder Ereignissetter zu erstellen.Routing events through the visual tree enables controls that implement composition at the visual level to handle events or create event setters.

Strukturen, Inhaltselemente und InhaltshostsTrees, Content Elements, and Content Hosts

Inhaltselemente (Klassen, die abgeleitet ContentElement) sind nicht Teil der visuellen Struktur; sie erben nicht von Visual und haben keine visuelle Darstellung.Content elements (classes that derive from ContentElement) are not part of the visual tree; they do not inherit from Visual and do not have a visual representation. Um in einer Benutzeroberfläche überhaupt angezeigt zu werden. eine ContentElement muss gehostet werden, in einem Inhaltshost, die sowohl eine Visual und ein Teilnehmer der logischen Struktur.In order to appear in a UI at all, a ContentElement must be hosted in a content host that is both a Visual and a logical tree participant. Solch ein Objekt in der Regel ist eine FrameworkElement.Usually such an object is a FrameworkElement. Sie können konzipieren, dass der Inhaltshost wie ein „Browser“ für den Inhalt ist und wählt, wie der Inhalt innerhalb des Bildschirmbereichs, den der Host steuert, anzuzeigen ist.You can conceptualize that the content host is somewhat like a "browser" for the content and chooses how to display that content within the screen region that the host controls. Wenn der Inhalt gehostet wird, kann der Inhalt zu einem Teilnehmer bestimmter Prozessstrukturen gemacht werden, die normalerweise der visuellen Struktur zugeordnet sind.When the content is hosted, the content can be made a participant in certain tree processes that are normally associated with the visual tree. Im Allgemeinen die FrameworkElement Hostklasse enthält die Implementierung von Code, der ein gehostetes hinzufügt ContentElement für die Ereignisroute über Unterknoten der logischen Inhaltsstruktur, obwohl der gehostete Inhalt ist nicht Teil der echten visuellen Struktur.Generally, the FrameworkElement host class includes implementation code that adds any hosted ContentElement to the event route through subnodes of the content logical tree, even though the hosted content is not part of the true visual tree. Dies ist erforderlich, damit eine ContentElement können Quelle ein Ereignis, das auf jedes Element außer sich selbst weitergeleitet.This is necessary so that a ContentElement can source a routed event that routes to any element other than itself.

Traversierung der StrukturTree Traversal

Die LogicalTreeHelper -Klasse stellt die GetChildren, GetParent, und FindLogicalNode Methoden zum Durchlaufen der logischen Struktur.The LogicalTreeHelper class provides the GetChildren, GetParent, and FindLogicalNode methods for logical tree traversal. In den meisten Fällen sollte Sie nicht die logische Struktur von vorhandenen Steuerelementen durchlaufen müssen, da diese Steuerelemente fast immer ihre logisch untergeordneten Elemente als dedizierte Auflistungseigenschaft verfügbar machen, die Auflistungszugriff, wie z.B. Add, einen Indexer und so weiter, unterstützt.In most cases, you should not have to traverse the logical tree of existing controls, because these controls almost always expose their logical child elements as a dedicated collection property that supports collection access such as Add, an indexer, and so on. Traversierung der Struktur ist in erster Linie ein Szenario, die von Autoren von Steuerelementen verwendet wird, die nicht von geplanten Steuerelementmustern wie z. B. ableiten ItemsControl oder Panel , in denen Auflistungseigenschaften bereits festgelegt sind, und beabsichtigen, ihre eigenen Sammlung bereitstellen Unterstützung von Eigenschaften.Tree traversal is mainly a scenario that is used by control authors who choose not to derive from intended control patterns such as ItemsControl or Panel where collection properties are already defined, and who intend to provide their own collection property support.

Die visuelle Struktur unterstützt auch eine Hilfsklasse für die Traversierung der visuellen Struktur, VisualTreeHelper.The visual tree also supports a helper class for visual tree traversal, VisualTreeHelper. Die visuelle Struktur ist nicht verfügbar gemacht als bequem über steuerelementspezifischen Eigenschaften, sodass die VisualTreeHelper Klasse ist die empfohlene Methode die visuelle Struktur zu durchlaufen, wenn dies für Ihr programmierungszenario erforderlich ist.The visual tree is not exposed as conveniently through control-specific properties, so the VisualTreeHelper class is the recommended way to traverse the visual tree if that is necessary for your programming scenario. Weitere Informationen finden Sie unter Übersicht über das WPF-Grafikenrendering.For more information, see WPF Graphics Rendering Overview.

Hinweis

Manchmal ist es notwendig, die visuelle Struktur einer angewendeten Vorlage zu untersuchen.Sometimes it is necessary to examine the visual tree of an applied template. Gehen Sie bei dieser Technik vorsichtig vor.You should be careful when using this technique. Auch wenn Sie eine visuelle Struktur für ein Steuerelement durchlaufen, in dem Sie die Vorlage definieren, Consumer Ihres Steuerelements können jederzeit ändern die Vorlage durch Festlegen der Template -Eigenschaft für Instanzen und sogar der Endbenutzer kann die angewendete Vorlage beeinflussen, Ändern der Systemdesign.Even if you are traversing a visual tree for a control where you define the template, consumers of your control can always change the template by setting the Template property on instances, and even the end user can influence the applied template by changing the system theme.

Routen für Routingereignisse als „Struktur“Routes for Routed Events as a "Tree"

Wie bereits erwähnt, durchläuft die Route aller angegebenen Routingereignisse entlang eines einzelnen und vordefinierten Pfads einer Struktur, die eine Mischung aus den Darstellungen visueller und logischer Strukturen ist.As mentioned before, the route of any given routed event travels along a single and predetermined path of a tree that is a hybrid of the visual and logical tree representations. Die Ereignisroute kann innerhalb der Struktur nach oben oder nach unten passieren, je nachdem, ob es ein Tunnel- oder Bubbling-Routingereignis ist.The event route can travel either in the up or down directions within the tree depending on whether it is a tunneling or bubbling routed event. Das Konzept der Ereignisroute hat keine direkt unterstützende Hilfsprogrammklasse, die verwendet werden kann, um die Ereignisroute unabhängig vom Auslösen eines Ereignisses, das tatsächlich weiterleitet, zu „durchlaufen“.The event route concept does not have a directly supporting helper class that could be used to "walk" the event route independently of raising an event that actually routes. Es gibt eine Klasse, die die Route darstellt EventRoute, aber die Methoden dieser Klasse sind normalerweise nur zur internen Verwendung.There is a class that represents the route, EventRoute, but the methods of that class are generally for internal use only.

Ressourcenwörterbücher und StrukturenResource Dictionaries and Trees

Wörterbuchressourcensuche für alle Resources, die auf einer Seite festgelegt sind, durchlaufen im Grunde die logische Struktur.Resource dictionary lookup for all Resources defined in a page traverses basically the logical tree. Objekte, die nicht in der logischen Struktur sind, können auf verschlüsselte Ressourcen verweisen, aber die Ressourcensuchsequenz beginnt an dem Punkt, an dem das Objekt mit der logischen Struktur verbunden ist.Objects that are not in the logical tree can reference keyed resources, but the resource lookup sequence begins at the point where that object is connected to the logical tree. In WPF haben nur logische Strukturknoten ein Resources -Eigenschaft, enthält eine ResourceDictionary, besteht daher keinen Vorteil der Traversierung der visuellen Struktur, die Suche nach verschlüsselten Ressourcen aus einer ResourceDictionary.In WPF, only logical tree nodes can have a Resources property that contains a ResourceDictionary, therefore there is no benefit in traversing the visual tree looking for keyed resources from a ResourceDictionary.

Die Ressourcensuche kann jedoch auch über die unmittelbare logische Struktur hinaus erweitert werden.However, resource lookup can also extend beyond the immediate logical tree. Bei Anwendungsmarkups kann die Ressourcensuche auf Anwendungsebene von Ressourcenwörterbüchern weitergeführt werden, und anschließend bei der Designunterstützung und den Systemwerten fortgesetzt werden, die als statische Eigenschaften oder Schlüssel referenziert werden.For application markup, the resource lookup can then continue onward to application-level resource dictionaries and then to theme support and system values that are referenced as static properties or keys. Designs selbst können auch auf Systemwerte außerhalb der logischen Struktur des Designs verweisen, wenn die Ressourcenverweise dynamisch sind.Themes themselves can also reference system values outside of the theme logical tree if the resource references are dynamic. Weitere Informationen zu Ressourcenwörterbüchern und der Suchlogik, finden Sie unter XAML-Ressourcen.For more information on resource dictionaries and the lookup logic, see XAML Resources.

Siehe auchSee also