Classi XAML e personalizzate per WPFXAML and Custom Classes for WPF

XAML come implementato nei Framework Common Language Runtime (CLR) supporta la possibilità di definire una classe o una struttura personalizzata in qualsiasi linguaggio Common Language Runtime (CLR), quindi accedere a tale classe usando il markup XAML.XAML as implemented in common language runtime (CLR) frameworks supports the ability to define a custom class or structure in any common language runtime (CLR) language, and then access that class using XAML markup. All'interno dello stesso file di markup è possibile usare una combinazione di tipi definiti da Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) e di tipi personalizzati, in genere tramite mapping dei tipi personalizzati al prefisso di uno spazio dei nomi XAML.You can use a mixture of Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)-defined types and your custom types within the same markup file, typically by mapping the custom types to a XAML namespace prefix. Questo argomento descrive i requisiti che una classe personalizzata deve soddisfare perché sia utilizzabile come elemento XAML.This topic discusses the requirements that a custom class must satisfy to be usable as a XAML element.

Classi personalizzate in applicazioni o assemblyCustom Classes in Applications or Assemblies

È possibile definire classi personalizzate da usare in XAML in due modi distinti: all'interno del code-behind o di altro codice che generi l'applicazione Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) primaria o come classe di un assembly separato, ad esempio un eseguibile o una DLL usata come libreria di classi.Custom classes that are used in XAML can be defined in two distinct ways: within the code-behind or other code that produces the primary Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) application, or as a class in a separate assembly, such as an executable or DLL used as a class library. Ognuno di questi approcci presenta vantaggi e svantaggi specifici.Each of these approaches has particular advantages and disadvantages.

  • Il vantaggio della creazione di una libreria di classi consiste nella possibilità di condividere tutte queste classi personalizzate tra un gran numero di applicazioni diverse.The advantage of creating a class library is that any such custom classes can be shared across many different possible applications. Una libreria separata, poi, rende più semplice il controllo delle versioni delle applicazioni in caso di problemi e facilita la creazione di classi destinate a fungere da elementi radice di una pagina XAML.A separate library also makes versioning issues of applications easier to control, and simplifies creating a class where the intended class usage is as a root element on a XAML page.

  • Il vantaggio di poter definire classi personalizzate all'interno dell'applicazione consiste nel fatto che si tratta di una tecnica relativamente leggera in grado di ridurre al minimo i problemi di distribuzione e test che si riscontrano quando, oltre al file eseguibile dell'applicazione principale, si introducono assembly separati.The advantage of defining the custom classes in the application is that this technique is relatively lightweight and minimizes the deployment and testing issues encountered when you introduce separate assemblies beyond the main application executable.

  • Che le classi personalizzate vengano definite all'interno dello stesso assembly o in un assembly diverso, perché siano utilizzabili come elementi in XAML è necessario effettuarne il mapping tra lo spazio dei nomi CLR e quello XML.Whether defined in the same or different assembly, custom classes need to be mapped between CLR namespace and XML namespace in order to be used in XAML as elements. Vedere Spazi dei nomi XAML e mapping dello spazio dei nomi per XAML WPF.See XAML Namespaces and Namespace Mapping for WPF XAML.

Requisiti per una classe personalizzata come elemento XAMLRequirements for a Custom Class as a XAML Element

Perché sia possibile crearne un'istanza come elemento oggetto, la classe deve soddisfare i requisiti seguenti:In order to be able to be instantiated as an object element, your class must meet the following requirements:

  • Deve essere pubblica e supportare un costruttore pubblico senza parametri predefinito.Your custom class must be public and support a default (parameterless) public constructor. Per alcune note riguardanti le strutture, vedere la sezione seguente.(See following section for notes regarding structures.)

  • La classe personalizzata non deve essere una classe annidata.Your custom class must not be a nested class. Le classi annidate e il punto presente nella relativa sintassi di utilizzo CLR generale interferiscono con altre funzionalità di WPFWPF e/o di XAML, ad esempio le proprietà collegate.Nested classes and the "dot" in their general CLR usage syntax interfere with other WPFWPF and/or XAML features such as attached properties.

Oltre ad abilitare la sintassi degli elementi oggetto, la definizione dell'oggetto abilita la sintassi degli elementi proprietà per tutte le altre proprietà pubbliche che accettano tale oggetto come tipo valore.In addition to enabling object element syntax, your object definition also enables property element syntax for any other public properties that take that object as the value type. Ciò è dovuto al fatto che è ora possibile creare un'istanza dell'oggetto come elemento oggetto e inserirla come valore dell'elemento di tale proprietà.This is because the object can now be instantiated as an object element and can fill the property element value of such a property.

StruttureStructures

Le strutture definite come tipi personalizzati sono sempre in grado di essere costruite in XAML in WPFWPF. Ciò è dovuto al fatto che i compilatori CLR creano implicitamente un costruttore senza parametri per una struttura che Inizializza i valori predefiniti di tutti i valori delle proprietà.Structures that you define as custom types are always able to be constructed in XAML in WPFWPF .This is because the CLR compilers implicitly create a parameterless constructor for a structure that initializes all property values to their defaults. In alcuni casi il comportamento predefinito relativo alla costruzione e/o all'utilizzo degli elementi oggetto per una struttura non è consigliabile.In some cases, the default construction behavior and/or object element usage for a structure is not desirable. Ciò può essere dovuto al fatto che la struttura ha lo scopo di inserire valori e, dal punto di vista concettuale, di funzionare come un'unione, mentre i valori contenuti potrebbero essere interpretabili come reciprocamente esclusivi. Pertanto, non è possibile impostare alcuna delle proprietà della struttura.This might be because the structure is intended to fill values and function conceptually as a union, where the values contained might have mutually exclusive interpretations and thus none of its properties are settable. Viene GridLengthun WPFWPF esempio di tale struttura.A WPFWPF example of such a structure is GridLength. In genere, tali strutture devono implementare un convertitore di tipi che consenta di esprimere i valori sotto forma di attributo tramite convenzioni di stringa che creano interpretazioni o modalità diverse dei valori della struttura.Generally, such structures should implement a type converter such that the values can be expressed in attribute form, using string conventions that create the different interpretations or modes of the structure's values. La struttura deve anche esporre un comportamento simile per la costruzione del codice tramite un costruttore senza parametri.The structure should also expose similar behavior for code construction through a non-parameterless constructor.

Requisiti per le proprietà di classi personalizzate come attributi XAMLRequirements for Properties of a Custom Class as XAML Attributes

Le proprietà devono fare riferimento a un tipo in base al valore (ad esempio una primitiva) o usare una classe per il tipo che ha un costruttore senza parametri o un convertitore di tipi dedicato a cui un processore XAML può accedere.Properties must reference a by-value type (such as a primitive), or use a class for type that has either a parameterless constructor or a dedicated type converter that a XAML processor can access. Nell'implementazione XAML di CLR, i processori XAML trovano questi convertitori tramite il supporto nativo per le primitive di linguaggio o tramite l'applicazione di TypeConverterAttribute a un tipo o a un membro nelle definizioni di tipi di supportoIn the CLR XAML implementation, XAML processors either find such converters through native support for language primitives, or through application of TypeConverterAttribute to a type or member in backing type definitions

In alternativa, la proprietà può fare riferimento a un tipo di una classe astratta oppure a un'interfaccia.Alternatively, the property may reference an abstract class type, or an interface. Per le classi astratte o le interfacce, l'aspettativa per l'analisi XAML è che il valore della proprietà debba essere popolato con istanze di classi pratiche che implementano l'interfaccia oppure con istanze di tipi che derivano dalla classe astratta.For abstract classes or interfaces, the expectation for XAML parsing is that the property value must be filled with practical class instances that implement the interface, or instances of types that derive from the abstract class.

In una classe astratta è possibile dichiarare le proprietà, ma queste possono essere impostate solo per le classi pratiche che derivano dalla classe astratta.Properties can be declared on an abstract class, but can only be set on practical classes that derive from the abstract class. Questo perché la creazione dell'elemento oggetto per la classe richiede un costruttore pubblico senza parametri sulla classe.This is because creating the object element for the class at all requires a public parameterless constructor on the class.

Sintassi degli attributi abilitata per TypeConverterTypeConverter Enabled Attribute Syntax

Se si fornisce un convertitore di tipi dedicato con attributi a livello di classe, la conversione di un tipo abilita la sintassi degli attributi per tutte le proprietà per le quali è necessario creare un'istanza del tipo in questione.If you provide a dedicated, attributed type converter at the class level, the applied type conversion enables attribute syntax for any property that needs to instantiate that type. Un convertitore di tipi non Abilita l'utilizzo dell'elemento oggetto del tipo. solo la presenza di un costruttore senza parametri per quel tipo Abilita l'utilizzo dell'elemento oggetto.A type converter does not enable object element usage of the type; only the presence of a parameterless constructor for that type enables object element usage. In genere, pertanto, le proprietà abilitate dal convertitore di tipi possono essere usate nella sintassi delle proprietà solo se il tipo stesso supporta anche la sintassi degli elementi oggetto.Therefore, properties that are type-converter enabled are generally speaking not usable in property syntax, unless the type itself also supports object element syntax. Eccezione: è possibile specificare la sintassi di elementi proprietà, ma l'elemento proprietà deve contenere una stringa.The exception to this is that you can specify a property element syntax, but have the property element contain a string. Questo utilizzo è effettivamente essenzialmente equivalente all'utilizzo della sintassi degli attributi e tale utilizzo non è comune a meno che non sia necessaria una gestione più efficace dello spazio vuoto del valore dell'attributo.That usage is really essentially equivalent to an attribute syntax usage, and such a usage is not common unless there is a need for more robust white-space handling of the attribute value. L'utilizzo degli elementi proprietà riportato di seguito, ad esempio, accetta una stringa e l'equivalente dell'utilizzo dell'attributo:For example, the following is a property element usage that takes a string, and the attribute usage equivalent:

<Button>Hallo!
  <Button.Language>
    de-DE
  </Button.Language>
</Button>
<Button Language="de-DE">Hallo!</Button>

Esempi di proprietà in cui è consentita la sintassi degli attributi ma la sintassi dell'elemento proprietà che contiene un elemento oggetto non è consentita tramite XAML sono varie proprietà che accettano il tipo di Cursor.Examples of properties where attribute syntax is allowed but property element syntax that contains an object element is disallowed through XAML are various properties that take the Cursor type. La classe Cursor dispone di un convertitore di tipi dedicato CursorConverter, ma non espone un costruttore senza parametri, quindi la proprietà Cursor può essere impostata solo tramite la sintassi dell'attributo, anche se il tipo di Cursor effettivo è un tipo riferimento.The Cursor class has a dedicated type converter CursorConverter, but does not expose a parameterless constructor, so the Cursor property can only be set through attribute syntax even though the actual Cursor type is a reference type.

Convertitori di tipi per proprietàPer-Property Type Converters

In alternativa, la proprietà stessa può dichiarare un convertitore di tipi a livello di proprietà.Alternatively, the property itself may declare a type converter at the property level. In questo modo viene abilitato un "linguaggio mini" che crea un'istanza di oggetti del tipo della proprietà inline, elaborando i valori stringa in ingresso dell'attributo come input per un'operazione di ConvertFrom basata sul tipo appropriato.This enables a "mini language" that instantiates objects of the type of the property inline, by processing incoming string values of the attribute as input for a ConvertFrom operation based on the appropriate type. In genere questa operazione viene eseguita per fornire una funzione di accesso pratica e non come unico mezzo per consentire l'impostazione di una proprietà in XAML.Typically this is done to provide a convenience accessor, and not as the sole means to enable setting a property in XAML. Tuttavia, è anche possibile usare convertitori di tipi per gli attributi in cui si vogliono usare i tipi CLR esistenti che non forniscono un costruttore senza parametri o un convertitore di tipi con attributi.However, it is also possible to use type converters for attributes where you want to use existing CLR types that do not supply either a parameterless constructor or an attributed type converter. Gli esempi dell'API WPFWPF sono alcune proprietà che accettano il tipo di CultureInfo.Examples from the WPFWPF API are certain properties that take the CultureInfo type. In questo caso, WPFWPF utilizzato il tipo di CultureInfo Framework di Microsoft .NET esistente per migliorare gli scenari di compatibilità e migrazione utilizzati nelle versioni precedenti dei Framework, ma il tipo di CultureInfo non supportava i costruttori necessari o la conversione del tipo a livello di tipo in modo che sia possibile utilizzarli direttamente come valore di proprietà XAML.In this case, WPFWPF used the existing Microsoft .NET Framework CultureInfo type to better address compatibility and migration scenarios that were used in earlier versions of frameworks, but the CultureInfo type did not support the necessary constructors or type-level type conversion to be usable as a XAML property value directly.

Ogni volta che si espone una proprietà con utilizzo in XAML, in particolare se l'utente è un autore di controlli, è consigliabile supportare tale proprietà con una proprietà di dipendenza.Whenever you expose a property that has a XAML usage, particularly if you are a control author, you should strongly consider backing that property with a dependency property. Ciò è particolarmente vero se si usa l'implementazione Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) esistente del processore XAML, perché è possibile migliorare le prestazioni usando DependencyProperty il backup.This is particularly true if you use the existing Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) implementation of the XAML processor, because you can improve performance by using DependencyProperty backing. Una proprietà di dipendenza espone le funzionalità del sistema di proprietà relative alla proprietà in questione che gli utenti si aspettano da una proprietà accessibile tramite XAML,A dependency property will expose property system features for your property that users will come to expect for a XAML accessible property. ad esempio funzionalità quali l'animazione, il data binding e il supporto degli stili.This includes features such as animation, data binding, and style support. Per altre informazioni, vedere Proprietà di dipendenza personalizzate e Caricamento XAML e proprietà di dipendenza.For more information, see Custom Dependency Properties and XAML Loading and Dependency Properties.

Scrittura e assegnazione di un convertitore di tipiWriting and Attributing a Type Converter

Occasionalmente è necessario scrivere un TypeConverter classe derivata personalizzata per fornire la conversione del tipo per il tipo di proprietà.You occasionally will need to write a custom TypeConverter derived class to provide type conversion for your property type. Per istruzioni su come derivare da e creare un convertitore di tipi in grado di supportare gli utilizzi XAML e come applicare la TypeConverterAttribute, vedere TypeConverter e XAML.For instructions on how to derive from and create a type converter that can support XAML usages, and how to apply the TypeConverterAttribute, see TypeConverters and XAML.

Requisiti per la sintassi degli attributi del gestore eventi XAML per gli eventi di una classe personalizzataRequirements for XAML Event Handler Attribute Syntax on Events of a Custom Class

Per essere utilizzabile come evento CLR, l'evento deve essere esposto come evento pubblico in una classe che supporta un costruttore senza parametri o in una classe astratta in cui è possibile accedere all'evento sulle classi derivate.To be usable as a CLR event, the event must be exposed as a public event on a class that supports a parameterless constructor, or on an abstract class where the event can be accessed on derived classes. Per essere utilizzato in modo pratico come un evento indirizzato, l'evento CLR deve implementare metodi espliciti add e remove, che aggiungono e rimuovono gestori per la firma dell'evento CLR e inoltrano tali gestori ai metodi AddHandler e RemoveHandler.In order to be used conveniently as a routed event, your CLR event should implement explicit add and remove methods, which add and remove handlers for the CLR event signature and forward those handlers to the AddHandler and RemoveHandler methods. Questi metodi aggiungono o rimuovono i gestori dall'archivio dei gestori degli eventi indirizzati per l'istanza a cui l'evento è associato.These methods add or remove the handlers to the routed event handler store on the instance that the event is attached to.

Nota

È possibile registrare i gestori direttamente per gli eventi indirizzati usando AddHandlere non definire intenzionalmente un evento CLR che espone l'evento indirizzato.It is possible to register handlers directly for routed events using AddHandler, and to deliberately not define a CLR event that exposes the routed event. Questa operazione non è in genere consigliata. In questo caso, infatti, per l'evento non è abilitata la sintassi degli attributi XAML per il collegamento di gestori e nella classe risultante il codice XAML relativo alle caratteristiche del tipo è meno chiaro.This is not generally recommended because the event will not enable XAML attribute syntax for attaching handlers, and your resulting class will offer a less transparent XAML view of that type's capabilities.

Scrittura delle proprietà delle raccolteWriting Collection Properties

Le proprietà che accettano un tipo di raccolta hanno una sintassi XAML che consente di specificare gli oggetti da aggiungere alla raccolta.Properties that take a collection type have a XAML syntax that enables you to specify objects that are added to the collection. Questa sintassi presenta due funzionalità di rilievo.This syntax has two notable features.

  • Nella sintassi dell'elemento oggetto non è necessario specificare l'oggetto che rappresenta l'oggetto Collection.The object that is the collection object does not need to be specified in object element syntax. Ogni volta che in XAML si specifica una proprietà che accetta un tipo di raccolta, tale tipo di raccolta è implicito.The presence of that collection type is implicit whenever you specify a property in XAML that takes a collection type.

  • Gli elementi figlio della proprietà della raccolta nel markup vengono elaborati in modo che diventino membri della raccolta.Child elements of the collection property in markup are processed to become members of the collection. In genere l'accesso del codice ai membri di una raccolta avviene tramite metodi di elenco o dizionario, ad esempio Add, oppure tramite un indicizzatore.Ordinarily, the code access to the members of a collection is performed through list/dictionary methods such as Add, or through an indexer. La sintassi XAML, tuttavia, non supporta metodi o indicizzatori, ad eccezione di XAML 2009, che supporta i metodi. L'uso di XAML 2009, però, limita i possibili utilizzi di WPF. Vedere Funzionalità del linguaggio XAML 2009.But XAML syntax does not support methods or indexers (exception: XAML 2009 can support methods, but using XAML 2009 restricts the possible WPF usages; see XAML 2009 Language Features). Le raccolte sono ovviamente un requisito molto comune per la creazione di un albero di elementi. È quindi necessario individuare il modo più adatto per popolarle in XAML dichiarativo.Collections are obviously a very common requirement for building a tree of elements, and you need some way to populate these collections in declarative XAML. Pertanto, gli elementi figlio di una proprietà della raccolta vengono elaborati aggiungendoli alla raccolta che rappresenta il valore del tipo della proprietà.Therefore, child elements of a collection property are processed by adding them to the collection that is the collection property type value.

La definizione di proprietà di raccolta per l'implementazione dei servizi XAML di .NET Framework e quindi anche per il processore XAML di WPF è la seguente.The .NET Framework XAML Services implementation and thus the WPF XAML processor uses the following definition for what constitutes a collection property. Il tipo della proprietà deve soddisfare una delle condizioni seguenti:The property type of the property must implement one of the following:

In CLR ognuno di questi tipi dispone di un metodo Add, usato dal processore XAML per aggiungere elementi alla raccolta sottostante durante la creazione dell'oggetto grafico.Each of these types in CLR has an Add method, which is used by the XAML processor to add items to the underlying collection when creating the object graph.

Nota

Le interfacce di List e Dictionary generiche (IList<T> e IDictionary<TKey,TValue>) non sono supportate per il rilevamento della raccolta da parte del processore XAML di WPFWPF.The generic List and Dictionary interfaces (IList<T> and IDictionary<TKey,TValue>) are not supported for collection detection by the WPFWPF XAML processor. Tuttavia, è possibile usare la classe List<T> come classe base, perché implementa direttamente IList o Dictionary<TKey,TValue> come classe di base, perché implementa IDictionary direttamente.However, you can use the List<T> class as a base class, because it implements IList directly, or Dictionary<TKey,TValue> as a base class, because it implements IDictionary directly.

Quando si dichiara una proprietà che accetta una raccolta, prestare attenzione alla modalità di inizializzazione del valore di questa proprietà nelle nuove istanze del tipo.When you declare a property that takes a collection, be cautious about how that property value is initialized in new instances of the type. Se non si implementa la proprietà come proprietà di dipendenza, è adeguato che la proprietà usi un campo sottostante che chiami il costruttore del tipo della raccolta.If you are not implementing the property as a dependency property, then having the property use a backing field that calls the collection type constructor is adequate. Se la proprietà è una proprietà di dipendenza, potrebbe essere necessario inizializzare la proprietà della raccolta come parte del costruttore del tipo predefinito.If your property is a dependency property, then you may need to initialize the collection property as part of the default type constructor. Ciò è dovuto al fatto che il valore predefinito di una proprietà di dipendenza proviene dai metadati e in genere è necessario evitare che il valore iniziale di una proprietà di una raccolta corrisponda a una raccolta condivisa statica.This is because a dependency property takes its default value from metadata, and you typically do not want the initial value of a collection property to be a static, shared collection. Deve esistere un'istanza della raccolta per ogni istanza del tipo che la contiene.There should be a collection instance per each containing type instance. Per altre informazioni, vedere Proprietà di dipendenza personalizzate.For more information, see Custom Dependency Properties.

Per la proprietà della raccolta è possibile implementare un tipo di raccolta personalizzato.You can implement a custom collection type for your collection property. A causa del trattamento implicito della proprietà della raccolta, non è necessario che il tipo di raccolta personalizzato fornisca un costruttore senza parametri per poter essere usato in modo implicito in XAML.Because of implicit collection property treatment, the custom collection type does not need to provide a parameterless constructor in order to be used in XAML implicitly. Tuttavia, è possibile specificare facoltativamente un costruttore senza parametri per il tipo di raccolta.However, you can optionally provide a parameterless constructor for the collection type. Questo modo di procedere può risultare utile.This can be a worthwhile practice. A meno che non si fornisca un costruttore senza parametri, non è possibile dichiarare in modo esplicito la raccolta come elemento oggetto.Unless you do provide a parameterless constructor, you cannot explicitly declare the collection as an object element. Alcuni autori di markup interpretano la dichiarazione esplicita di una raccolta come una questione di stile di markup.Some markup authors might prefer to see the explicit collection as a matter of markup style. Inoltre, un costruttore senza parametri può semplificare i requisiti di inizializzazione quando si creano nuovi oggetti che usano il tipo di raccolta come valore della proprietà.Also, a parameterless constructor can simplify the initialization requirements when you create new objects that use your collection type as a property value.

Dichiarazione di proprietà di contenuto XAMLDeclaring XAML Content Properties

Nel linguaggio XAML è definito il concetto di proprietà di contenuto XAMLXAML.The XAML language defines the concept of a XAMLXAML content property. Ogni classe utilizzabile nella sintassi per gli oggetti può avere una sola proprietà di contenuto XAML.Each class that is usable in object syntax can have exactly one XAML content property. Per dichiarare una proprietà come proprietà di contenuto XAML per la classe, applicare la ContentPropertyAttribute come parte della definizione della classe.To declare a property to be the XAML content property for your class, apply the ContentPropertyAttribute as part of the class definition. Specificare il nome della proprietà di contenuto XAML desiderata come Name nell'attributo.Specify the name of the intended XAML content property as the Name in the attribute. La proprietà viene specificata come stringa in base al nome, non come costrutto di reflection, ad esempio PropertyInfo.The property is specified as a string by name, not as a reflection construct such as PropertyInfo.

È possibile specificare una proprietà di raccolta come proprietà del contenuto XAML.You can specify a collection property to be the XAML content property. Il risultato è un utilizzo di tale proprietà in cui l'elemento oggetto può avere uno o più elementi figlio, senza alcun tag di elementi oggetto Collection o di elementi proprietà.This results in a usage for that property whereby the object element can have one or more child elements, without any intervening collection object elements or property element tags. Questi elementi vengono considerati come valore per la proprietà del contenuto XAML e vengono aggiunti all'istanza della raccolta sottostante.These elements are then treated as the value for the XAML content property and added to the backing collection instance.

Alcune proprietà del contenuto XAML esistenti usano il tipo di proprietà di Object.Some existing XAML content properties use the property type of Object. Ciò consente a una proprietà di contenuto XAML che può accettare valori primitivi, ad esempio un String, nonché di accettare un singolo valore dell'oggetto di riferimento.This enables a XAML content property that can take primitive values such as a String as well as taking a single reference object value. Se si segue questo modello, il tipo usato è responsabile della determinazione del tipo, nonché della gestione dei tipi possibili.If you follow this model, your type is responsible for type determination as well as the handling of possible types. Il motivo tipico di un tipo di contenuto Object consiste nel supportare sia un mezzo semplice per aggiungere il contenuto dell'oggetto come stringa (che riceve un trattamento di presentazione predefinito), sia un mezzo avanzato per aggiungere il contenuto dell'oggetto che specifica una presentazione non predefinita o dati aggiuntivi.The typical reason for an Object content type is to support both a simple means of adding object content as a string (which receives a default presentation treatment), or an advanced means of adding object content that specifies a non-default presentation or additional data.

Serializzazione di XAMLSerializing XAML

Per alcuni scenari, ad esempio per gli autori di controlli, è anche necessario assicurarsi che qualsiasi rappresentazione di oggetti per cui può essere creata un'istanza in XAML possa anche essere serializzata di nuovo nel markup XAML equivalente.For certain scenarios, such as if you are a control author, you may also want to assure that any object representation that can be instantiated in XAML can also be serialized back to equivalent XAML markup. I requisiti di serializzazione non sono descritti in questo argomento.Serialization requirements are not described in this topic. Vedere Cenni preliminari sulla modifica di controlli e Struttura ad albero e serializzazione degli elementi.See Control Authoring Overview and Element Tree and Serialization.

Vedere ancheSee also