Convertitori di tipi ed estensioni di markup per XAMLType Converters and Markup Extensions for XAML

I convertitori di tipi e le estensioni di markup sono due tecniche usate dai sistemi di tipi XAML e writer XAML per generare componenti dell'oggetto grafico.Type converters and markup extensions are two techniques that XAML type systems and XAML writers use to generate object graph components. Anche se condividono alcune caratteristiche, i convertitori di tipi e le estensioni di markup sono rappresentati in modo diverso in un flusso del nodo XAML.Although they share some characteristics, type converters and markup extensions are represented differently in a XAML node stream. In questo set di documentazione, i convertitori di tipi, le estensioni di markup e costrutti simili talvolta vengono detti collettivamente convertitori di valori.In this documentation set, type converters, markup extensions, and similar constructs are sometimes collectively referred to as value converters.

Convertitori di valoriValue Converters

In XAML i convertitori di valori vengono usati per vari scenari.In XAML, value converters are used for various scenarios. Nell'elenco seguente vengono indicati diversi tipi di convertitori di valori in XAML:The following list shows the different types of value converters in XAML:

  • Convertitore di tipiType converter

  • Estensione di markupMarkup extension

  • Serializzatore di valoriValue serializer

  • Classe correlata o classe di supporto che fornisce la logica per una sintassi del testo XAMLRelated class or support class that provides the logic for a XAML text syntax

Convertitori di tipiType Converters

Nella definizione di servizi XAML di .NET Framework i convertitori di tipi sono classi che derivano dalla classe TypeConverter CLR.In the .NET Framework XAML Services definition, type converters are classes that derive from the CLR TypeConverter class. TypeConverter è una classe che era in Microsoft .NET Framework prima dell'introduzione di XAML.TypeConverter is a class that was in the Microsoft .NET Framework before XAML existed. Lo scopo originale consisteva nel supporto di finestre delle proprietà e di analoghe metafore di modifica basate sul testo per le proprietà IDEIDE .Its original purpose was to support property windows and similar text-based editing metaphors for IDEIDE properties. L'introduzione di XAML a .NET Framework usa TypeConverter per convertire una sintassi del testo, come individuata in un valore di attributo o in un nodo di valori XAML, in un oggetto.The introduction of XAML to .NET Framework uses TypeConverter to convert a text syntax (as found in an attribute value or a XAML value node) into an object. TypeConverter può anche essere usato per serializzare un valore oggetto alla sintassi del testo.TypeConverter can also be used to serialize an object value to text syntax. TypeConverter è stato usato anche in implementazioni di XAML precedenti specifiche del framework in Windows Presentation Foundation (WPF) e Windows Communication Foundation (WCF).TypeConverter was also used in previous framework-specific XAML implementations in Windows Presentation Foundation (WPF) and Windows Communication Foundation (WCF). Per altre informazioni su TypeConverter in XAML, vedere Type Converters for XAML Overview.For more information about the TypeConverter in XAML, see Type Converters for XAML Overview.

Estensioni di markupMarkup Extensions

Nell'implementazione di servizi XAML di .NET Framework, le estensioni di markup sono classi che derivano dalla classe MarkupExtension .In the .NET Framework XAML Services implementation, markup extensions are classes that derive from the MarkupExtension class. Le estensioni di markup sono un concetto che in questo formato è originato dal linguaggio XAML.Markup extensions are a concept that in this form is originated by the XAML language. È possibile considerare un'estensione di markup come una sequenza di escape estensibile che chiama una classe di servizio per fornirne la logica corrispondente.You can think of a markup extension as being something like an extensible escape sequence that calls into a service class to provide its logic. In termini di markup, i processori XAML riconoscono universalmente un'estensione di markup mediante una sequenza di testo che inizia con una parentesi graffa aperta ({) in una stringa di testo.In terms of markup, XAML processors universally recognize a markup extension by a text sequence that starts with an opening brace ({) in a text string.

Le estensioni di markup sono diverse dai convertitori di tipi.Markup extensions differ from type converters. I convertitori di tipi sono in genere associati a tipi o membri.Type converters are typically associated with types or members. Vengono richiamati quando una creazione dell'oggetto grafico o una serializzazione rileva una sintassi del testo associato a tali entità.They are invoked when an object graph creation or a serialization encounters text syntax that is associated with those entities.

Le estensioni di markup sono associate a una singola classe di servizio di supporto, ma possono essere applicate per qualsiasi valore del membro.Markup extensions are associated with a single supporting service class, but can be applied for any member value. È tuttavia possibile implementare l'estensione di markup per limitarne deliberatamente l'utilizzo a determinati membri o tipi di destinazione usando il contesto del servizio. Le estensioni di markup possono eseguire l'override di un'associazione del convertitore di tipi(However, you can implement your markup extension to deliberately restrict its use to certain members or destination types, by using service context.) Markup extensions can override a type converter association. oppure è possibile specificare un valore di attributo per i membri che altrimenti non supporterebbero una sintassi del testo.Or you can use them to specify an attribute value for members that would not otherwise support a text syntax.

Per altre informazioni sul modello di implementazione dell'estensione di markup per XAML, vedere Markup Extensions for XAML Overview.For more information about the markup extension implementation pattern for XAML, see Markup Extensions for XAML Overview.

Nota

I tipi MarkupExtension e ValueSerializer sono entrambi inclusi nello spazio dei nomi System.Windows.Markup e non in quello System.Xaml .The MarkupExtension and ValueSerializer types are both in the System.Windows.Markup namespace and not in the System.Xaml namespace. Ciò non implica che questi tipi sono specifici per le tecnologie WPF o Windows Form che altrimenti popolano gli spazi dei nomi CLR che contengono la stringa Windows.This does not imply that these types are specific to either the WPF or Windows Forms technologies that otherwise populate CLR namespaces that contain the string Windows. MarkupExtension e ValueSerializer sono inclusi nell'assembly System.Xaml e non dispongono di alcuna dipendenza dal framework specifica.MarkupExtension and ValueSerializer are in the System.Xaml assembly and have no specific framework dependency. Questi tipi esistevano già nello spazio dei nomi CLR per .NET Framework 3.0.NET Framework 3.0 e restano nello spazio dei nomi CLR in .NET Framework 4.NET Framework 4 per evitare di interrompere i riferimenti nei progetti WPF esistenti.These types existed in the CLR namespace for .NET Framework 3.0.NET Framework 3.0 and remain in the CLR namespace in .NET Framework 4.NET Framework 4 to avoid breaking references in existing WPF projects. Per altre informazioni, vedere Types Migrated from WPF to System.Xaml.For more information, see Types Migrated from WPF to System.Xaml.

Serializzatori di valoriValue Serializers

Un oggetto ValueSerializer è un convertitore di tipi specializzato ottimizzato per la conversione di un oggetto in una stringa.A ValueSerializer is a specialized type converter that is optimized for converting an object to a string. È possibile che un oggetto ValueSerializer per XAML non implementi affatto il metodo ConvertFrom .A ValueSerializer for XAML might not implement the ConvertFrom method at all. Con un'implementazione di ValueSerializer si ottengono servizi in un modo simile a quello di un'implementazione di TypeConverter .A ValueSerializer implementation obtains services in a manner that is like a TypeConverter implementation. I metodi virtuali forniscono un parametro di input context.The virtual methods provide an input context parameter. Il parametro context è di tipo IValueSerializerContext, che eredita dall'interfaccia di IServiceProvider e dispone di un metodo GetService .The context parameter is of type IValueSerializerContext, which inherits from the IServiceProvider interface and has a GetService method.

Nel sistema di tipi XAML e per le implementazioni del writer XAML che usano l'elaborazione del ciclo del nodo XAML per la serializzazione, un convertitore di valori associato a un tipo o a un membro viene segnalato dalla relativa proprietà XamlType.ValueSerializer.In the XAML type system and for XAML writer implementations that use XAML node loop processing for serialization, a value converter that is associated with a type or member is reported by its own XamlType.ValueSerializer property. Il significato per i writer XAML che eseguono la serializzazione è che, in presenza di XamlType.TypeConverter e XamlType.ValueSerializer, il convertitore di tipi deve essere usato per il percorso di caricamento e il serializzatore di valori deve essere usato per il percorso di salvataggio.The meaning to XAML writers that perform serialization is that if a XamlType.TypeConverter and XamlType.ValueSerializer exist, the type converter should be used for the load path and the value serializer should be used for the save path. Se XamlType.TypeConverter esiste ma XamlType.ValueSerializer è null, il convertitore di tipi viene usato anche per il percorso di salvataggio.If XamlType.TypeConverter exists but XamlType.ValueSerializer is null, the type converter is also used for the save path.

Altri convertitori di valoriOther Value Converters

Un convertitore di valori è estensibile oltre i modelli specifici di un convertitore di tipi o un'estensione di markup.A value converter is extensible beyond the specific patterns of a type converter or a markup extension. Questa personalizzazione tuttavia richiede anche la ridefinizione del sistema di tipi XAML fornito dai servizi XAML di .NET Framework.However, this customization would also require the redefinition of the XAML type system as provided by .NET Framework XAML Services. Il sistema di tipi XAML esistente dispone di rappresentazioni e sistemi di report per convertitori di tipi, estensioni di markup e serializzatori di valori, ma non per moduli personalizzati di conversione dei valori.The existing XAML type system has representations and reporting systems for type converters, markup extensions, and value serializers, but not for custom forms of value conversion. Se si intendono creare convertitori di valori personalizzati, usare il tipo XamlValueConverter<TConverterBase> .If you want to create custom value converters, use the XamlValueConverter<TConverterBase> type.

Convertitori di tipi ed estensioni di markup in combinazioneType Converters and Markup Extensions in Combination

I convertitori di tipi e le estensioni di markup vengono usati per situazioni diverse in XAML.Markup extensions and type converters are used for different situations in XAML. Anche se il contesto è disponibile per gli utilizzi di estensione di markup, il comportamento della conversione di tipi di proprietà in cui un'estensione di markup fornisce un valore in genere non è selezionato nelle implementazioni dell'estensione di markup.Although context is available for markup extension usages, type conversion behavior of properties where a markup extension provides a value is generally is not checked in the markup extension implementations. In altre parole, anche se un'estensione di markup restituisce una stringa di testo come output di ProvideValue , non viene richiamato il comportamento di conversione di tipi su quella stringa così come applicato a una proprietà specifica o a un tipo di valore della proprietà.In other words, even if a markup extension returns a text string as its ProvideValue output, type conversion behavior on that string as applied to a specific property or property value type is not invoked. Lo scopo di un'estensione di markup in genere è quello di elaborare una stringa e restituire un oggetto senza coinvolgere alcun convertitore di tipi.Generally, the purpose of a markup extension is to process a string and return an object without any type converter involved.

Contesto del servizio per un convertitore di valoriService Context for a Value Converter

Quando si implementa un convertitore di valori, è spesso necessario accedere a un contesto in cui viene applicato il convertitore di valori.When you implement a value converter, you often need access to a context in which the value converter is applied. Questo contesto è noto come contesto del servizio.This context is known as the service context. Il contesto del servizio può includere informazioni quali il contesto dello schema XAML attivo, l'accesso al sistema di mapping dei tipi fornito dal contesto dello schema XAML e dal writer di oggetti XAML e così via.The service context might include information such as the active XAML schema context, access to the type mapping system that the XAML schema context and XAML object writer provide, and so on. Per altre informazioni sui contesti del servizio disponibili per un convertitore di valori e sulle modalità di accesso ai servizi eventualmente forniti da un contesto del servizio, vedere Service Contexts Available to Type Converters and Markup Extensions.For more information about the service contexts available for a value converter and how to access the services that a service context might provide, see Service Contexts Available to Type Converters and Markup Extensions.

Vedere ancheSee Also

MarkupExtension
XamlObjectWriter
Panoramica delle estensioni di markup per XAMLMarkup Extensions for XAML Overview
Panoramica dei convertitori di tipi per XAMLType Converters for XAML Overview
Contesti di servizio disponibili per convertitori di tipi ed estensioni di markupService Contexts Available to Type Converters and Markup Extensions