Strutture ad albero in WPFTrees in WPF

In molte tecnologie gli elementi e i componenti sono organizzati in una struttura ad albero in cui gli sviluppatori modificano direttamente i nodi degli oggetti nell'albero per influire sul rendering o sul comportamento di un'applicazione.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. Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) usa anche molte metafore correlate alla struttura ad albero per definire le relazioni tra gli elementi del programma.also uses several tree structure metaphors to define relationships between program elements. In genere gli sviluppatori WPF possono creare un'applicazione nel codice o definire parti dell'applicazione in XAML usando come riferimento concettuale la metafora della struttura ad albero di oggetti, ma chiameranno un'API specifica o useranno un markup specifico a tale scopo anziché un'API di modifica della struttura ad albero di oggetti generica simile a quella usata nel modello DOM XML.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 espone due classi helper che forniscono una visualizzazione della metafora dell'albero LogicalTreeHelper e VisualTreeHelper.WPF exposes two helper classes that provide a tree metaphor view, LogicalTreeHelper and VisualTreeHelper. Nella documentazione di WPF vengono inoltre usati i termini struttura ad albero visuale e albero logico, in quanto tali strutture ad albero sono utili per la comprensione del comportamento di alcune funzionalità chiave di WPF.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 questo argomento vengono descritte le caratteristiche della struttura ad albero visuale e dell'albero logico, viene illustrato il modo in cui tali alberi sono correlati a un concetto generale di albero degli oggetti e vengono introdotti LogicalTreeHelper e VisualTreeHelper.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.

Strutture ad albero in WPFTrees in WPF

La struttura ad albero più completa in WPFWPF è la struttura ad albero di oggetti.The most complete tree structure in WPFWPF is the object tree. Se si definisce la pagina di un'applicazione in XAMLXAML e quindi si carica il codice XAMLXAML, la struttura ad albero viene creata in base alle relazioni di annidamento degli elementi nel markup.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. Se si definisce un'applicazione o una parte dell'applicazione nel codice, la struttura ad albero viene creata in base a come si assegnano i valori per le proprietà che implementano il modello di contenuto per un determinato oggetto.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) la struttura ad albero di oggetti completa viene concettualizzata e può essere segnalata alla relativa API pubblica in due modi diversi: come albero logico e come struttura ad albero visuale.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. Le distinzioni tra albero logico e struttura ad albero visuale non sono sempre necessariamente importanti, ma possono talvolta causare problemi con alcuni sottosistemi WPFWPF e influire sulle scelte fatte nel markup o nel codice.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.

Anche se non sempre si modifica direttamente l'albero logico o la struttura ad albero visuale, la corretta comprensione dei concetti correlati all'interazione delle strutture ad albero è utile per comprendere WPF in quanto tecnologia.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. Il concetto di WPF come metafora della struttura ad albero è anche essenziale per comprendere il funzionamento dell'ereditarietà delle proprietà e del routing degli eventi in WPFWPF.Thinking of WPF as a tree metaphor of some kind is also crucial to understanding how property inheritance and event routing work in WPFWPF.

Nota

Poiché la struttura ad albero di oggetti è più un concetto che un'API effettiva, è possibile pensare a tale concetto anche come a un oggetto grafico.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 pratica, in fase di esecuzione ci sono relazioni tra gli oggetti per cui la metafora di struttura ad albero non è valida.In practice, there are relationships between objects at run time where the tree metaphor will break down. Ciononostante, in particolare con l'interfaccia utente definita in XAML, la metafora della struttura ad albero è sufficientemente pertinente da far sì che nella maggior parte della documentazione di WPF venga usato il termine struttura ad albero di oggetti per fare riferimento a tale concetto generale.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.

Albero logicoThe Logical Tree

In WPFWPF è possibile aggiungere contenuto agli elementi dell'interfaccia utente impostando proprietà degli oggetti di supporto per tali elementi.In WPFWPF, you add content to UI elements by setting properties of the objects that back those elements. Ad esempio, si aggiungono elementi a un controllo ListBox modificando la relativa proprietà Items.For example, you add items to a ListBox control by manipulating its Items property. Questa operazione consente di inserire elementi nell'ItemCollection che corrisponde al valore della proprietà Items.By doing this, you are placing items into the ItemCollection that is the Items property value. Analogamente, per aggiungere oggetti a una DockPanel, è possibile modificare il relativo valore della proprietà Children.Similarly, to add objects to a DockPanel, you manipulate its Children property value. Qui si aggiungono oggetti al UIElementCollection.Here, you are adding objects to the UIElementCollection. Per un esempio di codice, vedere procedura: aggiungere un elemento in modo dinamico.For a code example, see How to: Add an Element Dynamically.

In Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML), quando si inseriscono voci di elenco in un ListBox o in controlli o altri elementi dell'interfaccia utente in un DockPanel, si usano anche le proprietà Items e Children, in modo esplicito o implicito, come nell'esempio seguente.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>

Se si elaborasse questo codice XAML come XML in un modello DOM (Document Object Model) e fossero stati inclusi tag impostati come commenti impliciti (operazione consentita), la struttura ad albero DOM XML risultante includerebbe elementi per <ListBox.Items> e altri elementi impliciti.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. Poiché tuttavia XAML non elabora in questo modo durante la lettura del markup e la scrittura negli oggetti, l'oggetto grafico risultante non includerà letteralmente 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. Dispone tuttavia di una proprietà ListBox denominata Items che contiene una ItemCollectione che ItemCollection viene inizializzata ma vuota quando viene elaborato il ListBox XAML.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. Quindi, ogni elemento oggetto figlio esistente come contenuto per il ListBox viene aggiunto al ItemCollection dalle chiamate del parser per 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. Fino a questo punto, in questo esempio di elaborazione di XAML in una struttura ad albero di oggetti la struttura ad albero di oggetti creata sembra fondamentalmente essere un albero logico.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.

Tuttavia, l'albero logico non è l'intero oggetto grafico esistente per l'interfaccia utente dell'applicazione in fase di esecuzione, anche in caso di factoring degli elementi della sintassi implicita XAML. Il motivo principale è che sono gli oggetti visivi e i modelli.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. Si consideri, ad esempio, il Button.For example, consider the Button. L'albero logico segnala l'oggetto Button e anche la relativa stringa Content.The logical tree reports the Button object and also its string Content. Nella struttura ad albero di oggetti di runtime, tuttavia, questo pulsante è molto più complesso.But there is more to this button in the run-time object tree. In particolare, il pulsante viene visualizzato sullo schermo nel modo in cui è stato applicato un modello di controllo Button specifico.In particular, the button only appears on screen the way it does because a specific Button control template was applied. Gli oggetti visivi provenienti da un modello applicato, ad esempio il Border definito dal modello di grigio scuro intorno al pulsante visivo, non vengono segnalati nell'albero logico, anche se si sta osservando l'albero logico in fase di esecuzione, ad esempio la gestione di un evento di input dal interfaccia utente visibile e quindi lettura dell'albero logico.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). Per trovare gli oggetti visivi del modello, è invece necessario esaminare la struttura ad albero visuale.To find the template visuals, you would instead need to examine the visual tree.

Per altre informazioni sul mapping tra la sintassi XAMLXAML e l'oggetto grafico creato e sulla sintassi implicita in XAML, vedere Descrizione dettagliata della sintassi XAML o Cenni preliminari su 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).

Scopo dell'albero logicoThe Purpose of the Logical Tree

L'albero logico consente ai modelli di contenuto di scorrere rapidamente i relativi oggetti figlio possibili e rende i modelli di contenuto estendibili.The logical tree exists so that content models can readily iterate over their possible child objects, and so that content models can be extensible. L'albero logico fornisce inoltre un framework per determinate notifiche, ad esempio relative al caricamento di tutti gli oggetti nell'albero logico stesso.Also, the logical tree provides a framework for certain notifications, such as when all objects in the logical tree are loaded. Fondamentalmente l'albero logico è un'approssimazione di un oggetto grafico di runtime a livello di framework, che esclude gli oggetti visivi, ma è efficace per molte operazioni di query sulla composizione dell'applicazione di runtime.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.

Inoltre, i riferimenti a risorse statiche e dinamiche vengono risolti esaminando verso l'alto l'albero logico per le raccolte di Resources nell'oggetto richiedente iniziale, quindi proseguendo l'albero logico e controllando ogni FrameworkElement (o FrameworkContentElement) per un altro valore Resources che contiene una ResourceDictionary, possibilmente contenente tale chiave.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. L'albero logico viene usato per la ricerca delle risorse, quando sono presenti sia l'albero logico, sia la struttura ad albero visuale.The logical tree is used for resource lookup when both the logical tree and the visual tree are present. Per altre informazioni sui dizionari risorse e sulla ricerca, vedere Risorse XAML.For more information on resource dictionaries and lookup, see XAML Resources.

Composizione dell'albero logicoComposition of the Logical Tree

L'albero logico viene definito a livello di Framework WPF, il che significa che l'elemento di base WPF più rilevante per le operazioni di albero logico è FrameworkElement o 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. Tuttavia, come si può vedere se si usa effettivamente l'API LogicalTreeHelper, l'albero logico contiene talvolta nodi che non sono FrameworkElement o 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. Ad esempio, l'albero logico segnala il valore Text di un TextBlock, che è una stringa.For instance, the logical tree reports the Text value of a TextBlock, which is a string.

Override dell'albero logicoOverriding the Logical Tree

Gli autori di controlli avanzati possono eseguire l'override dell'albero logico eseguendo l'override di diverse API che definiscono il modo in cui un oggetto generale o un modello di contenuto aggiunge o rimuove oggetti all'interno dell'albero logico.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. Per un esempio relativo all'override dell'albero logico, vedere Eseguire l'override dell'albero logico.For an example of how to override the logical tree, see Override the Logical Tree.

Ereditarietà del valore della proprietàProperty Value Inheritance

L'ereditarietà dei valori delle proprietà funziona tramite un albero ibrido.Property value inheritance operates through a hybrid tree. I metadati effettivi che contengono la proprietà Inherits che consente l'ereditarietà della proprietà è la classe FrameworkPropertyMetadata a livello di Framework WPF.The actual metadata that contains the Inherits property that enables property inheritance is the WPF framework-level FrameworkPropertyMetadata class. Pertanto, sia l'elemento padre che include il valore originale che l'oggetto figlio che eredita tale valore devono essere FrameworkElement o FrameworkContentElemented entrambi devono essere parte di un albero logico.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. Per le proprietà WPF esistenti che supportano l'ereditarietà delle proprietà, tuttavia, l'ereditarietà dei valori delle proprietà può essere mantenuta tramite un nuovo oggetto non incluso nell'albero logico.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. Questa caratteristica è pertinente per lo più se si vuole fare in modo che gli elementi del modello usino valori di proprietà ereditati impostati sull'istanza basata sul modello o a livelli ancora superiori di composizione a livello di pagina e quindi più in alto nell'albero logico.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. Per garantire un funzionamento coerente dell'ereditarietà dei valori delle proprietà oltre tale limite, la proprietà che eredita deve essere registrata come proprietà associata. È consigliabile seguire questo modello anche se si vuole definire una proprietà di dipendenza personalizzata con un comportamento di ereditarietà della proprietà.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. L'albero esatto usato per l'ereditarietà delle proprietà non può essere completamente previsto da un metodo di utilità di una classe helper, nemmeno in fase di esecuzione.The exact tree used for property inheritance cannot be entirely anticipated by a helper class utility method, even at run time. Per altre informazioni, vedere Ereditarietà del valore della proprietà.For more information, see Property Value Inheritance.

Struttura ad albero visualeThe Visual Tree

In WPFWPF oltre al concetto di albero logico c'è anche il concetto di struttura ad albero visuale.In addition to the concept of the logical tree, there is also the concept of the visual tree in WPFWPF. La struttura ad albero visuale descrive la struttura degli oggetti visivi, come rappresentati dalla classe di base Visual.The visual tree describes the structure of visual objects, as represented by the Visual base class. Quando si scrive un modello per un controllo, si definisce o ridefinisce la struttura ad albero visuale relativa a quel controllo.When you write a template for a control, you are defining or redefining the visual tree that applies for that control. La struttura ad albero visuale è di interesse anche per gli sviluppatori che vogliono un controllo di livello inferiore sul disegno per ragioni di prestazioni e ottimizzazione.The visual tree is also of interest to developers who want lower-level control over drawing for performance and optimization reasons. Un'esposizione della struttura ad albero visuale come parte della programmazione di applicazioni WPFWPF convenzionale è rappresentata dal fatto che le route degli eventi indirizzati percorrono per lo più la struttura ad albero visuale e non l'albero logico.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. Questa sottigliezza del comportamento degli eventi indirizzati potrebbe non essere immediatamente visibile, a meno che l'utente non sia un autore di controlli.This subtlety of routed event behavior might not be immediately apparent unless you are a control author. Il routing di eventi nella struttura ad albero visuale consente ai controlli che implementano la composizione a livello visivo di gestire eventi o creare setter di eventi.Routing events through the visual tree enables controls that implement composition at the visual level to handle events or create event setters.

Alberi, elementi di contenuto e host di contenutoTrees, Content Elements, and Content Hosts

Gli elementi di contenuto (classi che derivano da ContentElement) non fanno parte della struttura ad albero visuale. non ereditano da Visual e non dispongono di una rappresentazione visiva.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. Per essere visualizzato in un'interfaccia utente, è necessario che un ContentElement sia ospitato in un host di contenuto che sia un Visual e un partecipante dell'albero logico.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. Un oggetto di questo tipo è in genere un FrameworkElement.Usually such an object is a FrameworkElement. È possibile pensare all'host di contenuto come a un "browser" per il contenuto, che sceglie come visualizzare tale contenuto all'interno dell'area dello schermo controllata dall'host.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. Quando il contenuto è ospitato, può partecipare ad alcuni processi dell'albero che normalmente sono associati alla struttura ad albero visuale.When the content is hosted, the content can be made a participant in certain tree processes that are normally associated with the visual tree. In genere, la classe host FrameworkElement include il codice di implementazione che aggiunge qualsiasi ContentElement ospitata alla route dell'evento tramite sottonodi dell'albero logico del contenuto, anche se il contenuto ospitato non fa parte della struttura ad albero visuale vera e propria.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. Questa operazione è necessaria in modo che un ContentElement possa originare un evento indirizzato che viene indirizzato a qualsiasi elemento diverso da se stesso.This is necessary so that a ContentElement can source a routed event that routes to any element other than itself.

Attraversamento dell'alberoTree Traversal

La classe LogicalTreeHelper fornisce i metodi GetChildren, GetParente FindLogicalNode per l'attraversamento dell'albero logico.The LogicalTreeHelper class provides the GetChildren, GetParent, and FindLogicalNode methods for logical tree traversal. Nella maggior parte dei casi, non è necessario attraversare l'albero logico dei controlli esistenti, perché i controlli espongono quasi sempre i relativi elementi figlio logici come proprietà di raccolta dedicata che supporta l'accesso alla raccolta, ad esempio Add, un indicizzatore e così via.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. L'attraversamento dell'albero è principalmente uno scenario usato dagli autori di controlli che scelgono di non derivare da pattern di controllo previsti, ad esempio ItemsControl o Panel in cui le proprietà della raccolta sono già definite e che desiderano fornire la propria proprietà di raccolta supporto.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.

La struttura ad albero visuale supporta inoltre una classe helper per l'attraversamento della struttura ad albero visuale VisualTreeHelper.The visual tree also supports a helper class for visual tree traversal, VisualTreeHelper. La struttura ad albero visuale non è esposta in modo appropriato tramite proprietà specifiche del controllo, quindi la classe VisualTreeHelper è il modo consigliato per attraversare la struttura ad albero visuale, se necessario per lo scenario di programmazione.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. Per altre informazioni, vedere Cenni preliminari sul rendering della grafica WPF.For more information, see WPF Graphics Rendering Overview.

Nota

A volte è necessario esaminare la struttura ad albero visuale di un modello applicato.Sometimes it is necessary to examine the visual tree of an applied template. Quando si usa questa tecnica, è necessario procedere con attenzione.You should be careful when using this technique. Anche se si attraversa una struttura ad albero visuale per un controllo in cui si definisce il modello, gli utenti del controllo possono sempre modificare il modello impostando la proprietà Template sulle istanze e anche l'utente finale può influenzare il modello applicato modificando il sistema tema.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.

Route per eventi indirizzati come "albero"Routes for Routed Events as a "Tree"

Come indicato in precedenza, la route di qualsiasi evento indirizzato percorre un singolo percorso predeterminato di un albero che consiste in una forma ibrida delle rappresentazioni di struttura ad albero visuale e albero logico.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. La route degli eventi può percorrere l'albero procedendo verso l'alto o verso il basso, a seconda che si tratti di un evento indirizzato di bubbling o di tunneling.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. Il concetto di route dell'evento non prevede una classe helper di supporto diretto, che potrebbe essere usata per "percorrere" la route dell'evento indipendentemente dalla generazione di un evento che effettivamente percorre una route.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. Esiste una classe che rappresenta la route, EventRoute, ma i metodi di tale classe sono in genere per uso interno.There is a class that represents the route, EventRoute, but the methods of that class are generally for internal use only.

Dizionari risorse e alberiResource Dictionaries and Trees

La ricerca nei dizionari risorse di tutti gli oggetti Resources definiti in una pagina attraversa fondamentalmente l'albero logico.Resource dictionary lookup for all Resources defined in a page traverses basically the logical tree. Gli oggetti non inclusi nell'albero logico possono fare riferimento a risorse con chiave, ma la sequenza di ricerca delle risorse inizia nel punto in cui l'oggetto è connesso all'albero logico.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 solo i nodi della struttura ad albero logica possono avere una proprietà Resources che contiene una ResourceDictionary, pertanto non vi è alcun vantaggio nell'attraversamento della struttura ad albero visuale per la ricerca di risorse con chiave da una 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.

La ricerca delle risorse può però estendersi anche oltre l'albero logico diretto.However, resource lookup can also extend beyond the immediate logical tree. Per il markup dell'applicazione, la ricerca delle risorse può proseguire verso l'altro nei dizionari risorse a livello di applicazione e quindi verso il supporto dei temi e i valori di sistema a cui viene fatto riferimento come chiavi o proprietà statiche.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. Se i riferimenti alle risorse sono dinamici, i temi stessi possono fare riferimento anche ai valori di sistema esterni all'albero logico del tema.Themes themselves can also reference system values outside of the theme logical tree if the resource references are dynamic. Per altre informazioni sui dizionari risorse e sulla logica di ricerca, vedere Risorse XAML.For more information on resource dictionaries and the lookup logic, see XAML Resources.

Vedere ancheSee also