Cenni preliminari sulle proprietà associateAttached Properties Overview

Una proprietà associata è un concetto definito da XAML.An attached property is a concept defined by XAML. Una proprietà associata deve essere usata come un tipo di proprietà globale che è possibile impostare su qualsiasi oggetto.An attached property is intended to be used as a type of global property that is settable on any object. In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) le proprietà associate sono in genere definite come un tipo specializzato di proprietà di dipendenza che non dispone della proprietà "wrapper" convenzionale.In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), attached properties are typically defined as a specialized form of dependency property that does not have the conventional property "wrapper".

PrerequisitiPrerequisites

Questo argomento presuppone la conoscenza delle proprietà di dipendenza dal punto di vista di un consumer delle proprietà di dipendenza esistenti nelle classi di Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), nonché la lettura dell'argomento Panoramica sulle proprietà di dipendenza.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) classes, and have read the Dependency Properties Overview. Per seguire gli esempi in questo argomento, è necessario comprendere anche XAML e sapere come scrivere applicazioni WPF.To follow the examples in this topic, you should also understand XAML and know how to write WPF applications.

Perché usare le proprietà associateWhy Use Attached Properties

Una delle finalità di una proprietà associata consiste nel consentire a diversi elementi figlio di specificare valori univoci di una proprietà effettivamente definita in un elemento padre.One purpose of an attached property is to allow different child elements to specify unique values for a property that is actually defined in a parent element. Un'applicazione specifica di questo scenario consente agli elementi figlio di notificare all'elemento padre la modalità con cui devono essere presentati nell'interfaccia utenteuser interface (UI).A specific application of this scenario is having child elements inform the parent element of how they are to be presented in the interfaccia utenteuser interface (UI). Un esempio è la proprietà DockPanel.Dock.One example is the DockPanel.Dock property. La proprietà DockPanel.Dock viene creata come proprietà associata perché è progettata per essere impostata su elementi contenuti all'interno di un DockPanel, anziché su DockPanel stessa.The DockPanel.Dock property is created as an attached property because it is designed to be set on elements that are contained within a DockPanel, rather than on DockPanel itself. La classe DockPanel definisce il campo DependencyProperty statico denominato DockProperty, quindi fornisce i metodi GetDock e SetDock come funzioni di accesso pubbliche per la proprietà associata.The DockPanel class defines the static DependencyProperty field named DockProperty, and then provides the GetDock and SetDock methods as public accessors for the attached property.

Proprietà associate in XAMLAttached Properties in XAML

In XAML, è possibile impostare le proprietà associate usando la sintassi ProviderProprietàAssociata.NomeProprietàIn XAML, you set attached properties by using the syntax AttachedPropertyProvider.PropertyName

Di seguito è riportato un esempio di come è possibile impostare DockPanel.Dock in XAML:The following is an example of how you can set DockPanel.Dock in XAML:

<DockPanel>
  <CheckBox DockPanel.Dock="Top">Hello</CheckBox>
</DockPanel>

Si noti che l'utilizzo è piuttosto simile a una proprietà statica. si fa sempre riferimento al tipo DockPanel proprietario e si registra la proprietà associata, anziché fare riferimento a qualsiasi istanza specificata in base al nome.Note that the usage is somewhat similar to a static property; you always reference the type DockPanel that owns and registers the attached property, rather than referring to any instance specified by name.

Inoltre, dato che una proprietà associata in XAML è un attributo che viene impostato nel markup, solo l'operazione di impostazione ha una certa rilevanza.Also, because an attached property in XAML is an attribute that you set in markup, only the set operation has any relevance. Non è possibile ottenere direttamente una proprietà in XAML, sebbene esistano alcuni meccanismi indiretti per confrontare i valori, ad esempio i trigger negli stili. Per altri dettagli, vedere Applicazione di stili e modelli.You cannot directly get a property in XAML, although there are some indirect mechanisms for comparing values, such as triggers in styles (for details, see Styling and Templating).

Implementazione delle proprietà associate in WPFAttached Property Implementation in WPF

In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), la maggior parte delle proprietà associate presenti nei tipi WPF correlati alla presentazione dell'interfaccia utente vengono implementate come proprietà di dipendenza.In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), most of the attached properties that exist on WPF types that are related to UI presentation are implemented as dependency properties. Le proprietà associate sono un concetto XAML, mentre le proprietà di dipendenza sono un concetto WPF.Attached properties are a XAML concept, whereas dependency properties are a WPF concept. Poiché le proprietà associate a WPF sono proprietà di dipendenza, supportano concetti della proprietà di dipendenza quali i metadati della proprietà e i valori predefiniti dei metadati della proprietà.Because WPF attached properties are dependency properties, they support dependency property concepts such as property metadata, and default values from that property metadata.

Modalità di utilizzo delle proprietà associate da parte del tipo proprietarioHow Attached Properties Are Used by the Owning Type

Anche se le proprietà associate possono essere impostate per qualsiasi oggetto, ciò non significa che l'impostazione della proprietà produce un risultato tangibile o che il valore verrà usato da un altro oggetto.Although attached properties are settable on any object, that does not automatically mean that setting the property will produce a tangible result, or that the value will ever be used by another object. In genere, le proprietà associate sono concepite in modo che gli oggetti provenienti da un'ampia varietà di possibili gerarchie di classi o di relazioni logiche possano ciascuno riportare informazioni comuni al tipo che definisce la proprietà associata.Generally, attached properties are intended so that objects coming from a wide variety of possible class hierarchies or logical relationships can each report common information to the type that defines the attached property. Il tipo che definisce la proprietà associata si attiene di regola a uno di questi modelli:The type that defines the attached property typically follows one of these models:

  • Il tipo che definisce la proprietà associata è progettato in modo da poter essere l'elemento padre degli elementi che imposteranno i valori per la proprietà associata.The type that defines the attached property is designed so that it can be the parent element of the elements that will set values for the attached property. Il tipo scorre quindi gli oggetti figlio attraverso la logica interna in base a una struttura ad albero degli oggetti, ottiene i valori e agisce in qualche modo su tali valori.The type then iterates its child objects through internal logic against some object tree structure, obtains the values, and acts on those values in some manner.

  • Il tipo che definisce la proprietà associata verrà usato come elemento figlio per un'ampia gamma di elementi padre e modelli di contenuto possibili.The type that defines the attached property will be used as the child element for a variety of possible parent elements and content models.

  • Il tipo che definisce la proprietà associata rappresenta un servizio.The type that defines the attached property represents a service. Gli altri tipi impostano i valori per la proprietà associata.Other types set values for the attached property. Pertanto, quando l'elemento che imposta la proprietà viene valutato nel contesto del servizio, i valori della proprietà associata vengono ottenuti tramite la logica interna della classe del servizio.Then, when the element that set the property is evaluated in the context of the service, the attached property values are obtained through internal logic of the service class.

Esempio di proprietà associata definita dall'elemento padreAn Example of a Parent-Defined Attached Property

Lo scenario più comune in cui WPF definisce una proprietà associata è quando un elemento padre supporta una raccolta di elementi figlio e implementa anche un comportamento in cui le specifiche del comportamento vengono segnalate singolarmente per ogni elemento figlio.The most typical scenario where WPF defines an attached property is when a parent element supports a child element collection, and also implements a behavior where the specifics of the behavior are reported individually for each child element.

DockPanel definisce la proprietà associata DockPanel.Dock e DockPanel dispone di codice a livello di classe come parte della logica di rendering (in particolare, MeasureOverride e ArrangeOverride).DockPanel defines the DockPanel.Dock attached property, and DockPanel has class-level code as part of its rendering logic (specifically, MeasureOverride and ArrangeOverride). Un'istanza di DockPanel verificherà sempre se uno degli elementi figlio immediati ha impostato un valore per DockPanel.Dock.A DockPanel instance will always check to see whether any of its immediate child elements have set a value for DockPanel.Dock. In questo caso, tali valori diventano l'input per la logica di rendering applicata a quel particolare elemento figlio.If so, those values become input for the rendering logic applied to that particular child element. Le istanze di DockPanel annidate considerano ciascuna le raccolte di elementi figlio immediati, ma tale comportamento è specifico dell'implementazione per il modo in cui DockPanel elabora DockPanel.Dock i valori.Nested DockPanel instances each treat their own immediate child element collections, but that behavior is implementation-specific to how DockPanel processes DockPanel.Dock values. In teoria, è possibile che alcune proprietà associate abbiano effetto su elementi più distanti dell'elemento padre immediato.It is theoretically possible to have attached properties that influence elements beyond the immediate parent. Se la DockPanel.Dock proprietà associata è impostata su un elemento senza DockPanel elemento padre su cui agire, non viene generato alcun errore o eccezione.If the DockPanel.Dock attached property is set on an element that has no DockPanel parent element to act upon it, no error or exception is raised. Ciò significa semplicemente che è stato impostato un valore di proprietà globale, ma non dispone di DockPanel padre corrente che potrebbe utilizzare le informazioni.This simply means that a global property value was set, but it has no current DockPanel parent that could consume the information.

Proprietà associate nel codiceAttached Properties in Code

Le proprietà associate in WPF non dispongono dei tipici metodi "wrapper" di CLR per un accesso semplice di tipo get/set.Attached properties in WPF do not have the typical CLR "wrapper" methods for easy get/set access. Ciò è dovuto al fatto che la proprietà associata non appartiene necessariamente allo spazio dei nomi CLR per le istanze in cui è impostata la proprietà.This is because the attached property is not necessarily part of the CLR namespace for instances where the property is set. Tuttavia, un processore XAML deve essere in grado di impostare tali valori quando il codice XAML viene analizzato.However, a XAML processor must be able to set those values when XAML is parsed. Per supportare un utilizzo efficace delle proprietà associate, il tipo di proprietario della proprietà associata deve implementare metodi delle funzioni di accesso dedicate nel formato Get_PropertyName_ e Set_PropertyName_ .To support an effective attached property usage, the owner type of the attached property must implement dedicated accessor methods in the form Get_PropertyName_ and Set_PropertyName_. Questi metodi della funzione di accesso dedicati sono anche utili per ottenere o impostare la proprietà associata nel codice.These dedicated accessor methods are also useful to get or set the attached property in code. Dal punto di vista del codice, una proprietà associata è simile a un campo sottostante che dispone di funzioni di accesso ai metodi anziché di funzioni di accesso alle proprietà e tale campo sottostante può trovarsi in qualsiasi oggetto senza che sia necessario definirlo in modo specifico.From a code perspective, an attached property is similar to a backing field that has method accessors instead of property accessors, and that backing field can exist on any object rather than needing to be specifically defined.

L'esempio seguente illustra come impostare una proprietà associata nel codice.The following example shows how you can set an attached property in code. In questo esempio myCheckBox è un'istanza della classe CheckBox.In this example, myCheckBox is an instance of the CheckBox class.

DockPanel myDockPanel = new DockPanel();
CheckBox myCheckBox = new CheckBox();
myCheckBox.Content = "Hello";
myDockPanel.Children.Add(myCheckBox);
DockPanel.SetDock(myCheckBox, Dock.Top);
Dim myDockPanel As New DockPanel()
Dim myCheckBox As New CheckBox()
myCheckBox.Content = "Hello"
myDockPanel.Children.Add(myCheckBox)
DockPanel.SetDock(myCheckBox, Dock.Top)

Analogamente al caso XAML, se myCheckBox non è già stato aggiunto come elemento figlio di myDockPanel dalla terza riga di codice, la quarta riga di codice non genera un'eccezione, ma il valore della proprietà non interagisce con un elemento padre DockPanel e pertanto lo farebbe Nothing.Similar to the XAML case, if myCheckBox had not already been added as a child element of myDockPanel by the third line of code, the fourth line of code would not raise an exception, but the property value would not interact with a DockPanel parent and thus would do nothing. Solo un valore DockPanel.Dock impostato su un elemento figlio combinato con la presenza di un elemento padre DockPanel provocherà un comportamento effettivo nell'applicazione sottoposta a rendering.Only a DockPanel.Dock value set on a child element combined with the presence of a DockPanel parent element will cause an effective behavior in the rendered application. In questo caso, è possibile impostare la proprietà associata e quindi effettuare l'associazione alla struttura ad albero.(In this case, you could set the attached property, then attach to the tree. In alternativa, è possibile effettuare l'associazione alla struttura ad albero, quindi impostare la proprietà associata.Or you could attach to the tree then set the attached property. Qualunque sia l'ordine delle azioni, il risultato è il medesimo.Either action order provides the same result.)

Metadati delle proprietà associateAttached Property Metadata

Quando si registra la proprietà, FrameworkPropertyMetadata viene impostato per specificare le caratteristiche della proprietà, ad esempio se la proprietà influisca sul rendering, sulla misurazione e così via.When registering the property, FrameworkPropertyMetadata is set to specify characteristics of the property, such as whether the property affects rendering, measurement, and so on. I metadati di una proprietà associata non sono in genere diversi rispetto a quelli presenti per una proprietà di dipendenza.Metadata for an attached property is generally no different than on a dependency property. Se si specifica un valore predefinito in un override per i metadati di una proprietà associata, tale valore diventa il valore predefinito della proprietà associata implicita nelle istanze della classe che esegue l'override.If you specify a default value in an override to attached property metadata, that value becomes the default value of the implicit attached property on instances of the overriding class. In particolare, il valore predefinito viene segnalato se un processo esegue una query per recuperare il valore di una proprietà associata tramite la funzione di accesso al metodo Get di quella proprietà, specificando un'istanza della classe in cui sono stati definiti i metadati e il valore per quella proprietà collegata non è stato impostato diversamente.Specifically, your default value is reported if some process queries for the value of an attached property through the Get method accessor for that property, specifying an instance of the class where you specified the metadata, and the value for that attached property was otherwise not set.

Se si vuole abilitare l'ereditarietà del valore di una proprietà, è necessario usare le proprietà associate anziché le proprietà di dipendenza non associate.If you want to enable property value inheritance on a property, you should use attached properties rather than non-attached dependency properties. Per informazioni dettagliate, vedere Ereditarietà del valore della proprietà.For details, see Property Value Inheritance.

Proprietà associate personalizzateCustom Attached Properties

Quando creare una proprietà associataWhen to Create an Attached Property

È possibile creare una proprietà associata quando è necessario disporre di un meccanismo di impostazione delle proprietà per le classi diverse dalla classe di definizione.You might create an attached property when there is a reason to have a property setting mechanism available for classes other than the defining class. In questo caso, lo scenario più comune è il layout.The most common scenario for this is layout. Esempi di proprietà di layout esistenti sono DockPanel.Dock, Panel.ZIndexe Canvas.Top.Examples of existing layout properties are DockPanel.Dock, Panel.ZIndex, and Canvas.Top. Nello scenario abilitato in questo contesto, gli elementi disponibili come elementi figlio degli elementi di controllo del layout sono in grado di indicare i requisiti del layout agli elementi padre del layout singolarmente, impostando ciascuno un valore della proprietà definito dall'elemento padre come proprietà associata.The scenario enabled here is that elements that exist as child elements to layout-controlling elements are able to express layout requirements to their layout parent elements individually, each setting a property value that the parent defined as an attached property.

Un altro scenario per l'uso di una proprietà associata è quello in cui la classe rappresenta un servizio e si vuole che le classi siano in grado di integrare il servizio in modo più trasparente.Another scenario for using an attached property is when your class represents a service, and you want classes to be able to integrate the service more transparently.

Un altro scenario è la ricezione del supporto di progettazione WPF di Visual Studio, ad esempio la modifica della finestra Proprietà .Yet another scenario is to receive Visual Studio WPF Designer support, such as Properties window editing. Per altre informazioni, vedere Cenni preliminari sulla modifica di controlli.For more information, see Control Authoring Overview.

Come indicato in precedenza, è necessario eseguire la registrazione come proprietà associata se si vuole usare l'ereditarietà del valore della proprietà.As mentioned before, you should register as an attached property if you want to use property value inheritance.

Come creare una proprietà associataHow to Create an Attached Property

Se la classe definisce la proprietà associata esclusivamente per l'uso in altri tipi, la classe non deve derivare da DependencyObject.If your class is defining the attached property strictly for use on other types, then the class does not have to derive from DependencyObject. Tuttavia, è necessario derivare da DependencyObject se si segue il modello WPF generale di che la proprietà associata sia anche una proprietà di dipendenza.But you do need to derive from DependencyObject if you follow the overall WPF model of having your attached property also be a dependency property.

Definire la proprietà associata come proprietà di dipendenza dichiarando un campo public static readonly di tipo DependencyProperty.Define your attached property as a dependency property by declaring a public static readonly field of type DependencyProperty. Questo campo viene definito usando il valore restituito del metodo RegisterAttached.You define this field by using the return value of the RegisterAttached method. Il nome del campo deve corrispondere al nome della proprietà associata, aggiunto con la stringa Property, per seguire il modello WPF stabilito di denominazione dei campi di identificazione rispetto alle proprietà che rappresentano.The field name must match the attached property name, appended with the string Property, to follow the established WPF pattern of naming the identifying fields versus the properties that they represent. Il provider di proprietà associate deve fornire anche metodi di Get_PropertyName_ e Set_PropertyName_ statici come funzioni di accesso per la proprietà associata. in caso contrario, il sistema di proprietà non potrà utilizzare la proprietà associata.The attached property provider must also provide static Get_PropertyName_ and Set_PropertyName_ methods as accessors for the attached property; failing to do this will result in the property system being unable to use your attached property.

Nota

Se si omette la funzione di accesso get della proprietà associata, data binding nella proprietà non funzionerà negli strumenti di progettazione, ad esempio Visual Studio e Blend per Visual Studio.If you omit the attached property's get accessor, data binding on the property will not work in design tools, such as Visual Studio and Blend for Visual Studio.

Funzione di accesso GetThe Get Accessor

La firma per la funzione di accesso Get_PropertyName_ deve essere:The signature for the Get_PropertyName_ accessor must be:

public static object GetPropertyName(object target)

  • L'oggetto target può essere specificato come tipo più specifico nell'implementazione.The target object can be specified as a more specific type in your implementation. Il metodo DockPanel.GetDock, ad esempio, digita il parametro come UIElement, perché la proprietà associata è destinata solo a essere impostata su UIElement istanze.For example, the DockPanel.GetDock method types the parameter as UIElement, because the attached property is only intended to be set on UIElement instances.

  • Il valore restituito può essere specificato come tipo più specifico nell'implementazione.The return value can be specified as a more specific type in your implementation. Ad esempio, il metodo GetDock lo digita come Dock, perché il valore può essere impostato solo su tale enumerazione.For example, the GetDock method types it as Dock, because the value can only be set to that enumeration.

Funzione di accesso SetThe Set Accessor

La firma per la funzione di accesso Set_PropertyName_ deve essere:The signature for the Set_PropertyName_ accessor must be:

public static void SetPropertyName(object target, object value)

  • L'oggetto target può essere specificato come tipo più specifico nell'implementazione.The target object can be specified as a more specific type in your implementation. Ad esempio, il metodo SetDock lo digita come UIElement, perché la proprietà associata è destinata solo a essere impostata per UIElement istanze.For example, the SetDock method types it as UIElement, because the attached property is only intended to be set on UIElement instances.

  • L'oggetto value può essere specificato come tipo più specifico nell'implementazione.The value object can be specified as a more specific type in your implementation. Ad esempio, il metodo SetDock lo digita come Dock, perché il valore può essere impostato solo su tale enumerazione.For example, the SetDock method types it as Dock, because the value can only be set to that enumeration. Tenere presente che il valore per questo metodo è l'input proveniente dal caricatore XAML quando rileva la proprietà associata in un utilizzo della proprietà associata nel markup.Remember that the value for this method is the input coming from the XAML loader when it encounters your attached property in an attached property usage in markup. Tale input è il valore specificato come valore di attributo XAML nel markup.That input is the value specified as a XAML attribute value in markup. Pertanto, per il tipo usato devono essere disponibili la conversione di tipo, il serializzatore del valore o il supporto per l'estensione di markup, in modo da poter creare il tipo appropriato in base al valore dell'attributo, rappresentato in pratica semplicemente da una stringa.Therefore there must be type conversion, value serializer, or markup extension support for the type you use, such that the appropriate type can be created from the attribute value (which is ultimately just a string).

Nell'esempio seguente viene illustrata la registrazione della proprietà di dipendenza (tramite il metodo RegisterAttached), nonché le funzioni di accesso Get_PropertyName_ e Set_PropertyName_ .The following example shows the dependency property registration (using the RegisterAttached method), as well as the Get_PropertyName_ and Set_PropertyName_ accessors. Nell'esempio, la proprietà associata è denominata IsBubbleSource.In the example, the attached property name is IsBubbleSource. Pertanto, le funzioni di accesso devono essere chiamate GetIsBubbleSource e SetIsBubbleSource.Therefore, the accessors must be named GetIsBubbleSource and SetIsBubbleSource.

public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
  "IsBubbleSource",
  typeof(Boolean),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
  element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
  return (Boolean)element.GetValue(IsBubbleSourceProperty);
}
Public Shared ReadOnly IsBubbleSourceProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsBubbleSource", GetType(Boolean), GetType(AquariumObject), New FrameworkPropertyMetadata(False, FrameworkPropertyMetadataOptions.AffectsRender))
Public Shared Sub SetIsBubbleSource(ByVal element As UIElement, ByVal value As Boolean)
    element.SetValue(IsBubbleSourceProperty, value)
End Sub
Public Shared Function GetIsBubbleSource(ByVal element As UIElement) As Boolean
    Return CType(element.GetValue(IsBubbleSourceProperty), Boolean)
End Function

Attributi delle proprietà associateAttached Property Attributes

WPF definisce diversi attributi .NET che hanno lo scopo di fornire informazioni sulle proprietà associate ai processi di reflection e agli utenti tipici delle informazioni sulla reflection e sulle proprietà, ad esempio le finestre di progettazione.WPF defines several .NET attributes that are intended to provide information about attached properties to reflection processes, and to typical users of reflection and property information such as designers. Dato che le proprietà associate hanno un tipo con ambito illimitato, le finestre di progettazione devono disporre di un modo per evitare di sopraffare gli utenti con un elenco globale di tutte le proprietà associate definite in una particolare implementazione della tecnologia che usa XAML.Because attached properties have a type of unlimited scope, designers need a way to avoid overwhelming users with a global list of all the attached properties that are defined in a particular technology implementation that uses XAML. Gli attributi .NET definiti da WPF per le proprietà associate possono essere utilizzati per definire l'ambito delle situazioni in cui una determinata proprietà associata deve essere visualizzata in una finestra delle proprietà.The .NET attributes that WPF defines for attached properties can be used to scope the situations where a given attached property should be shown in a properties window. È possibile prendere in considerazione l'applicazione di questi attributi anche per le proprietà associate personalizzate.You might consider applying these attributes for your own custom attached properties also. Lo scopo e la sintassi degli attributi .NET sono descritti nelle pagine di riferimento appropriate:The purpose and syntax of the .NET attributes is described on the appropriate reference pages:

Ulteriori informazioni sulle proprietà associateLearning More About Attached Properties

  • Per altre informazioni sulla creazione di una proprietà associata, vedere Registrare una proprietà associata.For more information on creating an attached property, see Register an Attached Property.

  • Per scenari di utilizzo più avanzati delle proprietà di dipendenza e delle proprietà associate, vedere Proprietà di dipendenza personalizzate.For more advanced usage scenarios for dependency properties and attached properties, see Custom Dependency Properties.

  • È anche possibile registrare una proprietà come proprietà associata e proprietà di dipendenza, ma continuare a esporre le implementazioni del "wrapper".You can also register a property as an attached property, and as a dependency property, but then still expose "wrapper" implementations. In questo caso, la proprietà può essere impostata in tale elemento o in qualsiasi elemento tramite la sintassi per le proprietà associate XAML.In this case, the property can be set either on that element, or on any element through the XAML attached property syntax. Un esempio di proprietà con uno scenario appropriato per gli utilizzi standard e collegati è FrameworkElement.FlowDirection.An example of a property with an appropriate scenario for both standard and attached usages is FrameworkElement.FlowDirection.

Vedere ancheSee also