Guida alla sintassi XAMLXAML syntax guide

Qui vengono illustrate le regole della sintassi XAML e la terminologia che descrive le restrizioni o le opzioni disponibili in tale sintassi.We explain XAML syntax rules and the terminology that describes the restrictions or choices available for XAML syntax. Troverai l'argomento molto utile se sei poco esperto nell'uso del linguaggio XAML, se vuoi ripassare la terminologia o aspetti specifici della sintassi o semplicemente se sei curioso riguardo al funzionamento di tale linguaggio e desideri farti un'idea generale.You'll find this topic useful if you are new to using the XAML language, you want a refresher on the terminology or parts of syntax, or you are curious about how the XAML language works and want more background and context.

XAML e XMLXAML is XML

XAML (Extensible Application Markup Language) include una sintassi di base derivata da XML e, per definizione, il codice XAML valido deve essere anche codice XML valido.Extensible Application Markup Language (XAML) has a basic syntax that builds on XML, and by definition valid XAML must be valid XML. Il linguaggio XAML include tuttavia anche concetti di sintassi propri, che estendono XML.But XAML also has its own syntax concepts that extend XML. Una determinata entità XML potrebbe essere valida nel codice XML semplice, ma tale sintassi potrebbe avere un significato diverso e più completo come codice XAML.A given XML entity might be valid in plain XML, but that syntax might have a different and more complete meaning as XAML. Questo argomento illustra tali concetti di sintassi XAML.This topic explains these XAML syntax concepts.

Vocabolari XAMLXAML vocabularies

Un elemento che distingue XAML dalla maggior parte degli utilizzi XML è che in genere XAML non viene applicato forzatamente con uno schema, come un file XSD.One area where XAML differs from most XML usages is that XAML is not typically enforced with a schema, such as an XSD file. Il motivo è che XAML è progettato per essere estensibile: è questo il significato della "X" nell'acronimo XAML.That's because XAML is intended to be extensible, that's what the "X" in the acronym XAML means. Una volta analizzato XAML, gli elementi e gli attributi a cui si fa riferimento in XAML dovrebbero esistere in una rappresentazione di codice sottostante, in tipi principali definiti da Windows Runtime o in tipi estesi o basati su Windows Runtime.Once XAML is parsed, the elements and attributes you reference in XAML are expected to exist in some backing code representation, either in the core types defined by the Windows Runtime, or in types that extend or are based off the Windows Runtime. La documentazione SDK talvolta fa riferimento a tipi già predefiniti in Windows Runtime e può essere usata in XAML come vocabolario XAML per Windows Runtime.The SDK documentation sometimes refers to the types that are already built-in to the Windows Runtime and can be used in XAML as being the XAML vocabulary for the Windows Runtime. Microsoft Visual Studio aiuta a produrre markup validi all'interno di questo vocabolario XAML.Microsoft Visual Studio helps you to produce markup that's valid within this XAML vocabulary. Visual Studio può includere anche tipi personalizzati per l'uso di XAML, purché nel progetto si faccia riferimento correttamente all'origine di tali tipi.Visual Studio can also include your custom types for XAML usage so long as the source of those types is referenced correctly in the project. Per altre info sul XAML e sui tipi personalizzati, vedi Mapping di spazi dei nomi XAML e dello spazio dei nomi.For more info about XAML and custom types, see XAML namespaces and namespace mapping.

Dichiarazione di oggettiDeclaring objects

Spesso i programmatori pensano in termini di oggetti e membri, mentre un linguaggio di markup è incentrato sui concetti di elemento e attributo.Programmers often think in terms of objects and members, whereas a markup language is conceptualized as elements and attributes. Sostanzialmente, un elemento dichiarato in un markup XAML diventa un oggetto in una rappresentazione a oggetti di runtime sottostante.In the most basic sense, an element that you declare in XAML markup becomes an object in a backing runtime object representation. Per creare un oggetto di runtime nella tua app, devi dichiarare un elemento XAML nel markup XAML.To create a run-time object for your app, you declare a XAML element in the XAML markup. L'oggetto viene creato quando Windows Runtime carica il codice XAML.The object is created when the Windows Runtime loads your XAML.

Un file XAML include sempre un elemento radice, in cui viene dichiarato un oggetto che rappresenterà la radice concettuale di una struttura di programmazione, ad esempio una pagina oppure l'oggetto grafico dell'intera definizione di runtime di un'applicazione.A XAML file always has exactly one element serving as its root, which declares an object that will be the conceptual root of some programming structure such as a page, or the object graph of the entire run-time definition of an application.

In termini di sintassi XAML, esistono tre modi per dichiarare gli oggetti in XAML:In terms of XAML syntax, there are three ways to declare objects in XAML:

  • Direttamente, usando la sintassi dell'elemento oggetto: vengono utilizzati tag di apertura e di chiusura per creare le istanze dell'oggetto come elemento in formato XML.Directly, using object element syntax: This uses opening and closing tags to instantiate an object as an XML-form element. Puoi usare questa sintassi per dichiarare oggetti radice o per creare oggetti annidati che impostano i valori delle proprietà.You can use this syntax to declare root objects or to create nested objects that set property values.
  • Indirettamente, usando la sintassi dell'attributo: viene utilizzato un valore di stringa in linea per dichiarare un oggetto.Indirectly, using attribute syntax: This uses an inline string value that has instructions for how to create an object. Il parser XAML usa tale stringa per impostare il valore di una proprietà su un valore di riferimento appena creato.The XAML parser uses this string to set the value of a property to a newly created reference value. Questo comportamento è supportato solo per determinati oggetti e proprietà comuni.Support for it is limited to certain common objects and properties.
  • Mediante l'utilizzo di un'estensione di markup.Using a markup extension.

Questo non significa che hai sempre la possibilità di scegliere una sintassi qualsiasi per la creazione degli oggetti in un vocabolario XAML.This does not mean that you always have the choice of any syntax for object creation in a XAML vocabulary. Alcuni oggetti possono essere creati solo con la sintassi dell'elemento oggetto.Some objects can be created only by using object element syntax. Altri possono essere creati solo impostandoli inizialmente in un attributo.Some objects can be created only by being initially set in an attribute. Di fatto, gli oggetti che possono essere creati con la sintassi dell'elemento oggetto o dell'attributo sono relativamente rari nei vocabolari XAML.In fact, objects that can be created with either object element or attribute syntax are comparatively rare in XAML vocabularies. Anche se entrambi i tipi di sintassi sono supportati, una delle due risulta più comune per una questione di stile.Even if both syntax forms are possible, one of the syntaxes will be more common as a matter of style. In XAML sono disponibili anche tecniche che possono essere utilizzate per fare riferimento agli oggetti esistenti, anziché per creare nuovi valori.There are also techniques you can use in XAML to reference existing objects rather than creating new values. Gli oggetti esistenti potrebbero essere definiti in altre aree del codice XAML oppure esistere in modo implicito a causa di un determinato comportamento della piattaforma e della relativa applicazione o dei modelli di programmazione.The existing objects might be defined either in other areas of XAML, or might exist implicitly through some behavior of the platform and its application or programming models.

Dichiarazione di un oggetto usando la sintassi degli elementi oggettoDeclaring an object by using object element syntax

Per dichiarare un oggetto con la sintassi degli elementi oggetto, devi scrivere tag come questi: <objectName> </objectName>, dove objectName è il nome del tipo per l'oggetto di cui vuoi creare l'istanza.To declare an object with object element syntax, you write tags like this: <objectName> </objectName>, where objectName is the type name for the object you want to instantiate. Di seguito è riportato l'utilizzo dell'elemento oggetto per dichiarare un oggetto Canvas :Here's object element usage to declare a Canvas object:

<Canvas>
</Canvas>

Se l'oggetto non contiene altri oggetti, è possibile dichiarare l'elemento oggetto utilizzando un tag di chiusura automatica anziché una coppia di apertura/chiusura: <Canvas />If the object does not contain other objects, you can declare the object element by using one self-closing tag instead of an opening/closing pair: <Canvas />

ContenitoriContainers

Molti oggetti utilizzati come elementi dell'interfaccia utente, ad esempio Canvas, possono contenere altri oggetti.Many objects used as UI elements, such as Canvas, can contain other objects. Tali oggetti vengono talvolta definiti contenitori.These are sometimes referred to as containers. L'esempio seguente mostra un contenitore Canvas che include solo l'elemento Rectangle.The following example shows a Canvas container that contains one element, a Rectangle.

<Canvas>
  <Rectangle />
</Canvas>

Dichiarazione di un oggetto usando la sintassi degli attributiDeclaring an object by using attribute syntax

Poiché questo comportamento è legato all'impostazione della proprietà, verrà approfondito maggiormente nelle sezioni successive.Because this behavior is tied to property setting, we'll talk about this more in upcoming sections.

Testo dell'inizializzazioneInitialization text

Per alcuni oggetti è possibile dichiarare nuovi valori specificando un testo interno che viene utilizzato come valore di inizializzazione per costruzione.For some objects you can declare new values using inner text that's used as initialization values for construction. In XAML questa tecnica è denominata testo dell'inizializzazione.In XAML, this technique and syntax is called initialization text. Concettualmente, il testo dell'inizializzazione è simile alla chiamata di un costruttore con parametri.Conceptually, initialization text is similar to calling a constructor that has parameters. Il testo dell'inizializzazione è utile per l'impostazione dei valori iniziali di determinate strutture.Initialization text is useful for setting initial values of certain structures.

Spesso si usa la sintassi di elemento oggetto con testo di inizializzazione per impostare un valore di struttura con x:Key, affinché possa esistere in un ResourceDictionary.You often use an object element syntax with initialization text if you want a structure value with an x:Key, so it can exist in a ResourceDictionary. Puoi usare questa soluzione se condividi il valore della struttura con più proprietà di destinazione.You might do this if you share that structure value among multiple target properties. Per alcune strutture non puoi usare la sintassi degli attributi per impostare i valori, pertanto il testo di inizializzazione costituisce l'unico strumento per generare una risorsa CornerRadius, Thickness, GridLength o Color utile e condivisibile.For some structures, you can't use attribute syntax to set the structure's values: initialization text is the only way to produce a useful and shareable CornerRadius, Thickness, GridLength or Color resource.

In questo breve esempio viene usato il testo dell'inizializzazione per specificare i valori di Thickness. In questo caso, le proprietà Left e Right vengono impostate su 20, mentre Top e Bottom vengono impostate su 10.This abbreviated example uses initialization text to specify values for a Thickness, in this case specifying values that set both Left and Right to 20, and both Top and Bottom to 10. In questo esempio viene mostrato l'oggetto Thickness creato come risorsa con chiave e quindi il riferimento a tale risorsa.This example shows the Thickness created as a keyed resource, and then the reference to that resource. Per altre info sul testo dell'inizializzazione di Thickness, vedi Thickness.For more info on Thickness initialization text, see Thickness.

<UserControl ...>
  <UserControl.Resources>
    <Thickness x:Key="TwentyTenThickness">20,10</Thickness>
    ....
  </UserControl.Resources>
  ...
  <Grid Margin="{StaticResource TwentyTenThickness}">
  ...
  </Grid>
</UserControl ...>

Nota    Alcune strutture non possono essere dichiarate come elementi oggetto.Note  Some structures can't be declared as object elements. Il testo dell'inizializzazione non è supportato e non può essere usato come risorsa.Initialization text isn't supported and they can't be used as resources. Per impostare le proprietà su questi valori nel codice XAML, devi utilizzare la sintassi degli attributi.You must use an attribute syntax in order to set properties to these values in XAML. Questi tipi sono: Duration, RepeatBehavior, Point, Rect e size.These types are: Duration, RepeatBehavior, Point, Rect and Size.

Impostazione di proprietàSetting properties

Puoi impostare le proprietà sugli oggetti dichiarati usando la sintassi degli elementi oggetto.You can set properties on objects that you declared by using object element syntax. In XAML puoi impostare le proprietà in più modi:There are multiple ways to set properties in XAML:

  • Usando la sintassi dell'attributo.By using attribute syntax.
  • Usando la sintassi dell'elemento proprietà.By using property element syntax.
  • Usando la sintassi dell'elemento in cui il contenuto (testo interno o elementi figlio) imposta la proprietà del contenuto XAML di un oggetto.By using element syntax where the content (inner text or child elements) is setting the XAML content property of an object.
  • Usando la sintassi delle raccolte (in genere la sintassi della raccolta implicita).By using a collection syntax (which is usually the implicit collection syntax).

Come per la dichiarazione degli oggetti, questo elenco non implica che tutte le proprietà possano essere impostate con tutte le tecniche disponibili.As with object declaration, this list doesn't imply that any property could be set with each of the techniques. Alcune proprietà supportano solo una delle tecniche.Some properties support only one of the techniques. Altre supportano più di una forma. Ad esempio, esistono proprietà che possono utilizzare sia la sintassi degli elementi di proprietà, sia la sintassi degli attributi.Some properties support more than one form; for example, there are properties that can use property element syntax, or attribute syntax. Ciò dipende sia dalla proprietà, sia dal tipo di oggetto utilizzato dalla proprietà.What's possible depends both on the property and on the object type that the property uses. Nelle informazioni di riferimento sulle API per Windows Runtime, troverai gli utilizzi XAML che puoi usare nella sezione Sintassi.In the Windows Runtime API reference, you'll see the XAML usages you can use in the Syntax section. A volte è disponibile un utilizzo alternativo che funzionerebbe ma risulterebbe più dettagliato.Sometimes there is an alternative usage that would work but would be more verbose. Talvolta gli usi dettagliati non vengono mostrati perché si cerca di dare priorità alle procedure consigliate o agli scenari realistici per l'uso delle proprietà in XAML.Those verbose usages aren't always shown because we are trying to show you the best practices or the real world scenarios for using that property in XAML. Le indicazioni relative alla sintassi XAML vengono fornite nelle sezioni relative all'utilizzo del codice XAML, nelle pagine di riferimento per le proprietà che è possibile impostare in XAML.Guidance for XAML syntax is provided in the XAML Usage sections of reference pages for properties that can be set in XAML.

Alcune proprietà degli oggetti non possono essere impostate in XAML con alcun mezzo e possono essere impostate solo tramite codice.Some properties on objects cannot be set in XAML by any means, and can only be set using code. Si tratta in genere di proprietà che è più appropriato utilizzare nel code-behind, anziché in XAML.Usually these are properties that are more appropriate to work with in the code-behind, not in XAML.

Le proprietà di sola lettura non possono essere impostate in XAML.A read-only property cannot be set in XAML. Anche nel codice, il tipo proprietario deve supportare altre tecniche per impostarle, come l'overload di un costruttore, un metodo di supporto o il supporto di una proprietà calcolata.Even in code, the owning type would have to support some other way to set it, like a constructor overload, helper method, or calculated property support. Una proprietà calcolata si basa sui valori di altre proprietà impostabili, a volte con l'aggiunta di un evento con gestione integrata. Tali funzionalità sono disponibili nel sistema di proprietà della dipendenza.A calculated property relies on the values of other settable properties plus sometimes an event with built-in handling; these features are available in the dependency property system. Per altre info sull'utilità delle proprietà della dipendenza per il supporto di una proprietà calcolata, vedi Panoramica delle proprietà di dipendenza.For more info on how dependency properties are useful for calculated property support, see Dependency properties overview.

Con la sintassi degli insiemi in XAML si ha l'impressione di impostare una proprietà di sola lettura, ma non è così.Collection syntax in XAML gives an appearance that you are setting a read-only property, but in fact you are not. Vedere "sintassi della raccolta" più avanti in questo argomento.See "Collection Syntax" later in this topic.

Impostazione di una proprietà mediante l'utilizzo della sintassi degli attributiSetting a property by using attribute syntax

L'impostazione di un valore di attributo è il modo tipico con cui si imposta un valore di proprietà in un linguaggio di markup, come XML o HTML.Setting an attribute value is the typical means by which you set a property value in a markup language, for example in XML or HTML. L'impostazione degli attributi XAML è simile all'impostazione dei valori degli attributi in XML.Setting XAML attributes is similar to how you set attribute values in XML. Il nome dell'attributo viene specificato in un punto qualsiasi all'interno dei tag, dopo il nome dell'elemento, da cui deve essere separato con almeno uno spazio.The attribute name is specified at any point within the tags following the element name, separated from element name by at least one whitespace. Il nome dell'attributo è seguito dal segno di uguale.The attribute name is followed by an equals sign. Il valore dell'attributo è racchiuso tra virgoletteThe attribute value is contained within a pair of quotes. singole o doppie, che devono corrispondere al valore racchiuso.The quotes can be either double quotes or single quotes so long as they match and enclose the value. Il valore stesso dell'attributo può essere espresso come stringa.The attribute value itself must be expressible as a string. La stringa spesso contiene valori numerici, ma in XAML tutti i valori degli attributi vengono gestiti come stringhe, finché il parser XAML non esegue una conversione di base del valore.The string often contains numerals, but to XAML, all attribute values are string values until the XAML parser gets involved and does some basic value conversion.

In questo esempio viene utilizzata la sintassi degli attributi per quattro attributi per impostare le proprietà Name, Width, Heighte Fill di un oggetto Rectangle .This example uses attribute syntax for four attributes to set the Name, Width, Height, and Fill properties of a Rectangle object.

<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />

Impostazione di una proprietà mediante l'utilizzo della sintassi degli elementi della proprietàSetting a property by using property element syntax

Molte proprietà di un oggetto possono essere impostate usando la sintassi degli elementi proprietà.Many properties of an object can be set by using property element syntax. Un elemento Property è simile al seguente: < Object . Property > .A property element looks like this: <object.property>.

Per usare la sintassi degli elementi proprietà, devi creare elementi proprietà XAML per la proprietà che vuoi impostare.To use property element syntax, you create XAML property elements for the property that you want to set. Nel codice XML standard questo elemento verrebbe considerato come un elemento con il punto all'interno del nome.In standard XML, this element would just be considered an element that has a dot in its name. Tuttavia, in XAML, il punto nel nome dell'elemento identifica l'elemento come elemento Property, con la Proprietà che dovrebbe essere un membro dell' oggetto in un'implementazione del modello a oggetti di supporto.However, in XAML, the dot in the element name identifies the element as a property element, with property expected to be a member of object in a backing object model implementation. Per usare la sintassi di elementi proprietà, deve essere possibile specificare un elemento oggetto allo scopo di "riempire" i tag degli elementi proprietà.To use property element syntax, it must be possible to specify an object element in order to "fill" the property element tags. Gli elementi proprietà includono sempre un contenuto, che può essere costituito da uno o più elementi o da testo interno, pertanto non possono essere a chiusura implicita.A property element will always have some content (single element, multiple elements, or inner text); there's no point in having a self-closing property element.

Nella grammatica seguente proprietà è il nome della proprietà che vuoi impostare e propertyValueAsObjectElement è un singolo elemento oggetto, che deve soddisfare i requisiti relativi al tipo di valore della proprietà.In the following grammar, property is the name of the property that you want to set and propertyValueAsObjectElement is a single object element, that's expected to satisfy the value type requirements of the property.

<object><object>

<oggetto . di Proprietà di><object.property>

propertyValueAsObjectElementpropertyValueAsObjectElement

</oggetto . di Proprietà di></object.property>

</object></object>

Nell'esempio seguente viene utilizzata la sintassi dell'elemento Property per impostare il riempimento di un rettangolo con un elemento oggetto SolidColorBrush .The following example uses property element syntax to set the Fill of a Rectangle with a SolidColorBrush object element. In SolidColorBrushColor è impostato come attributo. Il risultato analizzato di questo XAML è identico all'esempio di XAML precedente in cui Fill veniva impostato tramite la sintassi degli attributi.(Within the SolidColorBrush, Color is set as an attribute.) The parsed result of this XAML is identical to the previous XAML example that set Fill using attribute syntax.

<Rectangle
  Name="rectangle1"
  Width="100" 
  Height="100"
> 
  <Rectangle.Fill> 
    <SolidColorBrush Color="Blue"/> 
  </Rectangle.Fill>
</Rectangle>

Vocabolari XAML e programmazione orientata agli oggettiXAML vocabularies and object-oriented programming

Le proprietà e gli eventi disponibili come membri XAML di un tipo XAML di Windows Runtime vengono spesso ereditati come tipi di base.Properties and events as they appear as XAML members of a Windows Runtime XAML type are often inherited from base types. Considera l'esempio seguente: <Button Background="Blue" .../>.Consider this example: <Button Background="Blue" .../>. La proprietà background non è una proprietà dichiarata immediatamente sulla classe Button .The Background property is not an immediately declared property on the Button class. La proprietà Background viene invece ereditata dalla classe base Control.Instead, Background is inherited from the base Control class. Infatti, nell'articolo di riferimento per Button puoi vedere che gli elenchi dei membri contengono almeno un membro ereditato da ogni singolo elemento di una catena di classi base successive: ButtonBase, Control, FrameworkElement, UIElement, DependencyObject.In fact, if you look at the reference topic for Button you'll see that the members lists contain at least one inherited member from each of a chain of successive base classes: ButtonBase, Control, FrameworkElement, UIElement, DependencyObject. Nell'elenco Proprietà, tutte le proprietà di lettura e scrittura e le proprietà delle raccolte vengono ereditate come avviene per il vocabolario XAML.In the Properties list, all the read-write properties and collection properties are inherited in a XAML vocabulary sense. Gli eventi, ad esempio i vari eventi UIElement , vengono ereditati.Events (like the various UIElement events) are inherited too.

Se usi la documentazione di riferimento di Windows Runtime per ottenere indicazioni su XAML, il nome dell'elemento visualizzato nella sintassi o negli esempi di codice a volte si riferisce al tipo in cui viene originariamente definita la proprietà, perché tale argomento di riferimento è comune a tutti i tipi che possono ereditarlo da una classe base.If you use the Windows Runtime reference for XAML guidance, the element name that's shown in a syntax or even in example code is sometimes for the type that originally defines the property, because that reference topic is shared by all the possible types that inherit it from a base class. Se usi IntelliSense per XAML nell'editor XML di Visual Studio, la finestra IntelliSense e i relativi menu a discesa contengono un ottimo riepilogo dell'ereditarietà e forniscono un elenco accurato degli attributi disponibili per l'impostazione, dopo che hai iniziato a creare un elemento oggetto per un'istanza di una classe.If you use Visual Studio's IntelliSense for XAML in the XML editor, the IntelliSense and its drop-downs do a great job of coalescing the inheritance and providing an accurate list of attributes that are available for setting once you've started with an object element for a class instance.

Proprietà del contenuto XAMLXAML content properties

Alcuni tipi definiscono una delle proprietà in modo che la proprietà abiliti una sintassi del contenuto XAML.Some types define one of their properties such that the property enables a XAML content syntax. Per la proprietà del contenuto XAML di un tipo, puoi omettere l'elemento di proprietà durante la sua impostazione in XAML.For the XAML content property of a type, you can omit the property element for that property when specifying it in XAML. In alternativa, puoi impostare la proprietà su un valore di testo interno, fornendo tale testo direttamente all'interno dei tag dell'elemento oggetto del tipo proprietario.Or, you can set the property to an inner text value by providing that inner text directly within the owning type's object element tags. Le proprietà del contenuto XAML supportano una semplice sintassi di markup e rendono il codice XAML più leggibile agli esseri umani, riducendo il livello di annidamento.XAML content properties support straightforward markup syntax for that property and makes the XAML more human-readable by reducing the nesting.

Se è disponibile una sintassi del contenuto XAML, nella documentazione di riferimento di Windows Runtime quest'ultima viene illustrata nelle sezioni di Sintassi relative al codice XAML per la proprietà.If a XAML content syntax is available, that syntax will be shown in the "XAML" sections of Syntax for that property in the Windows Runtime reference documentation. Ad esempio, nella pagina della proprietà Child per Border viene illustrata la sintassi del contenuto XAML, anziché la sintassi degli elementi proprietà per impostare il valore Border.Child a oggetto singolo di un Border, come nel caso seguente:For example, the Child property page for Border shows XAML content syntax instead of property element syntax to set the single-object Border.Child value of a Border, like this:

<Border>
  <Button .../>
</Border>

Se la proprietà dichiarata come proprietà del contenuto XAML è il tipo Object o il tipo String, la sintassi del contenuto XAML supporta sostanzialmente il testo interno del modello di documento XML, ovvero una stringa fra i tag di apertura e di chiusura dell'oggetto.If the property that is declared as the XAML content property is the Object type, or is type String, then the XAML content syntax supports what's basically inner text in the XML document model: a string between the opening and closing object tags. Ad esempio, nella pagina della proprietà Text per TextBlock viene illustrata la sintassi del contenuto XAML, che include un valore di testo interno per impostare Text, ma la stringa "Text" non compare mai nel markup.For example, the Text property page for TextBlock shows XAML content syntax that has an inner text value to set Text, but the string "Text" never appears in the markup. Ecco un esempio di utilizzo:Here's an example usage:

<TextBlock>Hello!</TextBlock>

Se per una determinata classe esiste una proprietà del contenuto XAML, viene indicata nella sezione "Attributi" dell'argomento di riferimento per la classe.If a XAML content property exists for a class, that's indicated in the reference topic for the class, in the "Attributes" section. Cercare il valore di ContentPropertyAttribute.Look for the value of the ContentPropertyAttribute. Questo attributo usa il campo denominato "Name".This attribute uses a named field "Name". Il valore di "Name" è il nome della proprietà della classe che costituisce la proprietà del contenuto XAML.The value of "Name" is the name of the property of that class that is the XAML content property. Nella pagina di riferimento al bordo , ad esempio, verrà visualizzato quanto segue: tipo ContentProperty ("Name = Child").For example, on the Border reference page, you'll see this: ContentProperty("Name=Child").

Un'importante regola della sintassi XAML impedisce di combinare la proprietà del contenuto XAML con altri elementi proprietà impostati per l'elemento.One important XAML syntax rule we should mention is that you can't intermix the XAML content property and other property elements you set on the element. La proprietà del contenuto XAML deve essere impostata completamente prima o completamente dopo qualsiasi elemento proprietà.The XAML content property must be set entirely before any property elements, or entirely after. Ad esempio, questo codice XAML non è valido:For example this is invalid XAML:

<StackPanel>
  <Button>This example</Button>
  <StackPanel.Resources>
    <SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
  </StackPanel.Resources>
  <Button>... is illegal XAML</Button>
</StackPanel>

Sintassi delle raccolteCollection syntax

Tutte le sintassi mostrate fino a questo punto impostano le proprietà sui singoli oggetti.All of the syntaxes shown thus far are setting properties to single objects. Tuttavia, molti scenari di interfaccia utente richiedono che un determinato elemento padre possa includere più elementi figlio.But many UI scenarios require that a given parent element can have multiple child elements. Un'interfaccia utente per un modulo di input richiede ad esempio numerosi elementi casella di testo, alcune etichette e forse un pulsante "Invia".For example, a UI for an input form needs several text box elements, some labels, and perhaps a "Submit" button. Anche in questo caso, se fosse necessario usare un modello a oggetti di programmazione per accedere a questi elementi, si tratterebbe di elementi in una singola proprietà raccolta piuttosto che di singoli elementi come valori di proprietà diverse.Still, if you were to use a programming object model to access these multiple elements, they would typically be items in a single collection property, rather than each item being the value of different properties. XAML supporta più elementi figlio, nonché un tipico modello di raccolta di supporto, trattando come implicite le proprietà che utilizzano un tipo di raccolta e gestendo in modo particolare ogni elemento figlio di un tipo di raccolta.XAML supports multiple child elements as well as supporting a typical backing collection model by treating properties that use a collection type as implicit, and performing special handling for any child elements of a collection type.

Molte proprietà di raccolta sono identificate anche come proprietà del contenuto XAML per la classe.Many collection properties are also identified as the XAML content property for the class. La combinazione dell'elaborazione degli insiemi impliciti e della sintassi del contenuto XAML viene spesso applicata ai tipi utilizzati per la composizione dei controlli, come pannelli, visualizzazioni o controlli elementi.The combination of implicit collection processing and XAML content syntax is frequently seen in types used for control compositing, such as panels, views, or items controls. Nell'esempio seguente viene illustrato il più semplice codice XAML possibile per la composizione di due elementi dell'interfaccia utente peer all'interno di un elemento StackPanel.For example, the following example shows the simplest possible XAML for compositing two peer UI elements within a StackPanel.

<StackPanel>
  <TextBlock>Hello</TextBlock>
  <TextBlock>World</TextBlock>
</StackPanel>

Meccanismo della sintassi degli insiemi XAMLThe mechanism of XAML collection syntax

A prima vista, si ha l'impressione che il codice XAML abiliti una serie di proprietà di raccolta di sola lettura.It might at first appear that XAML is enabling a "set" of the read-only collection property. In realtà XAML abilita l'aggiunta di elementi a una raccolta esistente.In reality, what XAML enables here is adding items to an existing collection. Il linguaggio XAML e i processori XAML che implementano il supporto XAML si basano su una convenzione che prevede il supporto dei tipi di raccolta per abilitare questa sintassi.The XAML language and XAML processors implementing XAML support rely on a convention in backing collection types to enable this syntax. In genere è presente una proprietà di supporto, ad esempio un indicizzatore o una proprietà Items, che fa riferimento a specifici elementi della raccolta.Typically there is a backing property such as an indexer or Items property that refers to specific items of the collection. Normalmente tale proprietà non è esplicita nella sintassi XAML.Generally, that property is not explicit in the XAML syntax. Per le raccolte, il meccanismo sottostante per l'analisi XAML non è una proprietà, bensì un metodo. Nella maggior parte dei casi si tratta specificamente del metodo Add.For collections, the underlying mechanism for XAML parsing is not a property, but a method: specifically, the Add method in most cases. Quando il processore XAML incontra uno o più elementi oggetto all'interno di una sintassi delle raccolte XAML, ognuno di questi oggetti viene dapprima creato da un elemento, quindi ogni nuovo oggetto viene aggiunto in ordine alla raccolta che funge da contenitore chiamando il metodo Add della raccolta.When the XAML processor encounters one or more object elements within a XAML collection syntax, each such object is first created from an element, then each new object is added in order to the containing collection by calling the collection's Add method.

Quando un parser XAML aggiunge elementi a una raccolta, è la logica del metodo Add a determinare se un dato elemento XAML è un elemento figlio ammissibile dell'oggetto raccolta.When a XAML parser adds items to a collection, it is the logic of the Add method that determines whether a given XAML element is a permissible item child of the collection object. Molti tipi di raccolta sono fortemente tipizzati dall'implementazione di supporto, pertanto in base al parametro di input di Add devono essere passati solo i tipi che corrispondono al tipo di parametro Add.Many collection types are strongly typed by the backing implementation, meaning that the input parameter of Add expects that whatever is passed must be a type match with the Add parameter type.

Per le proprietà raccolta, ricorda di prestare attenzione quando tenti di specificare esplicitamente la raccolta come elemento oggetto.For collection properties, be careful about when you try to specify the collection explicitly as an object element. Il parser XAML crea un nuovo oggetto ogni volta che incontra un elemento oggetto.A XAML parser will create a new object whenever it encounters an object element. Se la proprietà raccolta che stai cercando di usare è di sola lettura, potrebbe verificarsi un'eccezione di analisi XAML.If the collection property you're trying to use is read-only, this can throw a XAML parse exception. Per evitare l'eccezione, devi semplicemente utilizzare la sintassi delle raccolte implicite.Just use the implicit collection syntax, and you won't see that exception.

Quando utilizzare la sintassi degli attributi o la sintassi degli elementi di proprietàWhen to use attribute or property element syntax

Tutte le proprietà che supportano l'impostazione in XAML supportano la sintassi degli attributi oppure la sintassi degli elementi di proprietà per l'impostazione diretta del valore, ma in genere non supportano l'intercambiabilità tra queste due sintassi.All properties that support being set in XAML will support attribute or property element syntax for direct value setting, but potentially will not support either syntax interchangeably. Alcune proprietà supportano una delle due sintassi, mentre altre supportano opzioni di sintassi aggiuntive, come la proprietà del contenuto XAML.Some properties do support either syntax, and some properties support additional syntax options like a XAML content property. Il tipo di sintassi XAML supportato da una proprietà dipende dal tipo di oggetto utilizzato dalla proprietà come tipo di proprietà.The type of XAML syntax supported by a property depends on the type of object that the property uses as its property type. Se la proprietà è di tipo primitivo, ad esempio, double (a virgola mobile o decimale), integer, booleana o stringa, supporta sempre la sintassi dell'attributo.If the property type is a primitive type, such as a double (float or decimal), integer, Boolean, or string, the property always supports attribute syntax.

Puoi usare la sintassi dell'attributo anche per impostare una proprietà, se per impostare tale proprietà usi un tipo di oggetto che può essere creato tramite l'elaborazione di una stringa.You can also use attribute syntax to set a property if the object type you use to set that property can be created by processing a string. Per le primitive è sempre così, perché la conversione del tipo è integrata nel parser.For primitives, this is always the case, the type conversion is built in to the parser. Tuttavia, altri tipi di oggetti possono essere creati anche usando una stinga specificata come valore di attributo, anziché come elemento oggetto in un elemento di proprietà.However, certain other object types can also be created by using a string specified as an attribute value, rather than an object element within a property element. Affinché ciò sia possibile, deve essere presente una conversione del tipo sottostante, supportata dalla proprietà specifica o in generale per tutti i valori che utilizzano quel tipo di proprietà.For this to work, there has to be an underlying type conversion, supported either by that particular property or supported generally for all values that use that property type. Il valore di stringa dell'attributo viene utilizzato per impostare proprietà importanti per l'inizializzazione del valore del nuovo oggetto.The string value of the attribute is used to set properties that are important for the initialization of the new object value. In teoria, un convertitore di tipi specifico può anche creare sottoclassi diverse di un tipo di proprietà comune, a seconda di come vengono elaborate in modo univoco le informazioni nella stringa.Potentially, a specific type converter can also create different subclasses of a common property type, depending on how it uniquely processes information in the string. Per i tipi di oggetto che supportano questo comportamento, una speciale grammatica sarà disponibile nella sezione della documentazione di riferimento dedicata alla sintassi.Object types that support this behavior will have a special grammar listed in the syntax section of the reference documentation. Ad esempio, la sintassi XAML per Brush mostra come usare una sintassi di attributo per creare un nuovo valore SolidColorBrush per qualsiasi proprietà di tipo Brush (nell'implementazione XAML di Windows Runtime sono presenti numerose proprietà Brush).As an example, the XAML syntax for Brush shows how an attribute syntax can be used to create a new SolidColorBrush value for any property of type Brush (and there are many Brush properties in Windows Runtime XAML).

Logica e regole dell'analisi XAMLXAML parsing logic and rules

In alcuni casi è utile leggere il codice XAML come lo leggerebbe un parser XAML, ovvero come una serie di token di stringa incontrati in sequenza.Sometime's it's informative to read the XAML in a similar way to how a XAML parser must read it: as a set of string tokens encountered in a linear order. Il parser XAML deve interpretare tali token nell'ambito di una serie di regole che fanno parte della definizione del funzionamento di XAML.A XAML parser must interpret these tokens under a set of rules that are part of the definition of how XAML works.

L'impostazione di un valore di attributo è il modo tipico con cui si imposta un valore di proprietà in un linguaggio di markup, come XML o HTML.Setting an attribute value is the typical means by which you set a property value in a markup language, for example in XML or HTML. Nella sintassi seguente objectName è l'oggetto di cui si vuole creare un'istanza, propertyName è il nome della proprietà che si vuole impostare su tale oggetto e propertyValue è il valore da impostare.In the following syntax, objectName is the object you want to instantiate, propertyName is the name of the property that you want to set on that object, and propertyValue is the value to set.

<objectName propertyName="propertyValue" .../>

-or-

<objectName propertyName="propertyValue">

...<!--element children -->

</objectName>

Entrambe le sintassi consentono di dichiarare un oggetto e di impostare una proprietà su tale oggetto.Either syntax enables you to declare an object and set a property on that object. Sebbene il primo esempio sia un singolo elemento nel markup, vengono illustrati vari passaggi relativamente all'analisi del markup da parte di un processore XAML.Although the first example is a single element in markup, there are actually discrete steps here with regard to how a XAML processor parses this markup.

Innanzitutto, la presenza dell'elemento oggetto indica che è necessario creare un'istanza di un nuovo oggetto objectName.First, the presence of the object element indicates that a new objectName object must be instantiated. È possibile impostare la proprietà di istanza PropertyName solo dopo tale istanza.Only after such an instance exists can the instance property propertyName be set on it.

Un'altra regola di XAML prevede la possibilità di impostare in qualsiasi ordine gli attributi di un elemento.Another rule of XAML is that attributes of an element must be able to be set in any order. Ad esempio, non c'è differenza tra <Rectangle Height="50" Width="100" /> e <Rectangle Width="100" Height="50" />.For example, there's no difference between <Rectangle Height="50" Width="100" /> and <Rectangle Width="100" Height="50" />. L'ordine usato dipende dal tuo stile.Which order you use is a matter of style.

Nota    I progettisti XAML spesso promuovono le convenzioni di ordinamento se si utilizzano superfici di progettazione diverse dall'editor XML, ma è possibile modificare il codice XAML in un secondo momento, per riordinare gli attributi o introducerne di nuovi.Note  XAML designers often promote ordering conventions if you use design surfaces other than the XML editor, but you can freely edit that XAML later, to reorder the attributes or introduce new ones.

Proprietà associateAttached properties

Il linguaggio XAML estende il linguaggio XML tramite l'aggiunta di un elemento di sintassi noto come proprietà associata.XAML extends XML by adding a syntax element known as an attached property. Come la sintassi degli elementi di proprietà, la sintassi della proprietà associata contiene un punto che riveste un significato specifico nell'analisi XAML.Similar to the property element syntax, the attached property syntax contains a dot, and the dot holds special meaning to XAML parsing. In particolare, il punto separa il provider della proprietà associata e il nome della proprietà.Specifically, the dot separates the provider of the attached property, and the property name.

In XAML puoi impostare le proprietà associate usando la sintassi AttachedPropertyProvider.PropertyName Ecco un esempio di come puoi impostare la proprietà associata Canvas.Left in XAML:In XAML, you set attached properties by using the syntax AttachedPropertyProvider.PropertyName Here is an example of how you can set the attached property Canvas.Left in XAML:

<Canvas>
  <Button Canvas.Left="50">Hello</Button>
</Canvas>

Puoi impostare la proprietà associata per gli elementi che non dispongono di alcuna proprietà con tale nome nel tipo di supporto, per un funzionamento simile a quello di una proprietà globale, o di un attributo definito da uno spazio dei nomi XML diverso, ad esempio l'attributo xml:space.You can set the attached property on elements that don't have a property of that name in the backing type, and in that way they function somewhat like a global property, or an attribute defined by a different XML namespace like the xml:space attribute.

Nell'implementazione XAML di Windows Runtime sono disponibili proprietà associate che supportano questi scenari:In Windows Runtime XAML you'll see attached properties that support these scenarios:

Per altre info, vedi Panoramica delle proprietà associate.For more info, see Attached properties overview.

Valori "{" letteraliLiteral "{" values

Poiché il simbolo di parentesi graffa { di apertura è l'apertura della sequenza di estensioni di markup, si usa una sequenza di escape per specificare un valore stringa letterale che inizia con " { ".Because the opening brace symbol { is the opening of the markup extension sequence, you use an escape sequence to specify a literal string value that starts with "{". La sequenza di escape è " { } ".The escape sequence is "{}". Per specificare ad esempio un valore stringa che rappresenta una singola parentesi graffa di apertura, specificare il valore dell'attributo come " { } { ".For example, to specify a string value that is a single opening brace, specify the attribute value as "{}{". È anche possibile usare le virgolette alternative (ad esempio, un ' all'interno di un valore di attributo delimitato da "") per fornire un { valore "" come stringa.You can also use the alternative quotation marks (for example, a ' within an attribute value delimited by "") to provide a "{" value as a string.

Nota    " \ }" funziona anche se si trova all'interno di un attributo tra virgolette.Note  "\}" also works if it's inside a quoted attribute.  

Valori di enumerazioneEnumeration values

Molte proprietà dell'API di Windows Runtime usano le enumerazioni come valori.Many properties in the Windows Runtime API use enumerations as values. Se il membro è una proprietà di lettura e scrittura, puoi impostare tale proprietà specificando un valore di attributo.If the member is a read-write property you can set such a property by providing an attribute value. Per identificare il valore di enumerazione da usare come valore della proprietà, devi usare il nome non qualificato della costante.You identify which enumeration value to use as the value of the property by using the unqualified name of the constant name . Ecco ad esempio come impostare UIElement.Visibility in XAML: <Button Visibility="Visible"/>.For example here's how to set UIElement.Visibility in XAML: <Button Visibility="Visible"/>. Qui "Visible" come stringa è mappato direttamente a una costante denominata dell'enumerazione Visibility, Visible.Here the "Visible" as a string is directly mapped to a named constant of the Visibility enumeration, Visible.

  • Non usare una forma qualificata, perché non funzionerebbe.Don't use a qualified form, it won't work. Ad esempio, questo codice XAML non è valido: <Button Visibility="Visibility.Visible"/>.For example, this is invalid XAML: <Button Visibility="Visibility.Visible"/>.
  • Non usare il valore della costante.Don't use the value of the constant. In altri termini, non basarti sul valore intero dell'enumerazione disponibile esplicitamente o implicitamente, a seconda del modo in cui è stata definita l'enumerazione.In other words, don't rely on the integer value of the enumeration that's there explicitly or implicitly depending on how the enumeration was defined. Anche se sembra che funzioni, non è una procedura consigliata in XAML o nel codice perché stai facendo affidamento su quello che potrebbe essere un dettaglio di implementazione temporaneo.Although it might appear to work, it's a bad practice either in XAML or in code because you're relying on what could be a transient implementation detail. Ad esempio, non usare questo codice: <Button Visibility="1"/>.For example, don't do this: <Button Visibility="1"/>.

Nota    Negli argomenti di riferimento per le API che utilizzano XAML e utilizzano le enumerazioni, fare clic sul collegamento al tipo di enumerazione nella sezione relativa al valore della proprietà della sintassi.Note  In reference topics for APIs that use XAML and use enumerations, click the link to the enumeration type in the Property value section of Syntax. Verrà visualizzata la pagina di enumerazione, in cui potrai scoprire le costanti con nome per quella enumerazione.This links to the enumeration page where you can discover the named constants for that enumeration.

Le enumerazioni possono essere sensibili al flag, ovvero con attributo FlagsAttribute.Enumerations can be flagwise, meaning that they are attributed with FlagsAttribute. Se devi specificare come valore di attributo XAML una combinazione di valori per un'enumerazione sensibile al flag, specifica il nome di ogni costante di enumerazione separando i nomi con una virgola (,) e senza aggiungere spazi intermedi.If you need to specify a combination of values for a flagwise enumeration as a XAML attribute value, use the name of each enumeration constant, with a comma (,) between each name, and no intervening space characters. Gli attributi flag non sono comuni nel vocabolario Windows Runtime XAML, ma ManipulationModes è un esempio in cui è supportata l'impostazione di un valore di enumerazione flag in XAML.Flagwise attributes aren't common in the Windows Runtime XAML vocabulary, but ManipulationModes is an example where setting a flagwise enumeration value in XAML is supported.

Interfacce in XAMLInterfaces in XAML

In rari casi potrai vedere una sintassi XAML in cui il tipo di proprietà è un'interfaccia.In rare cases you'll see a XAML syntax where the type of a property is an interface. Nel sistema di tipi XAML, un tipo che implementa quell'interfaccia è accettabile come valore durante l'analisi.In the XAML type system, a type that implements that interface is acceptable as a value when parsed. Deve essere disponibile un'istanza creata di questo tipo da usare come valore.There must be a created instance of such a type available to serve as the value. Potrai vedere un'interfaccia usata come tipo nella sintassi XAML per le proprietà Command e CommandParameter di ButtonBase.You'll see an interface used as a type in the XAML syntax for Command and CommandParameter properties of ButtonBase. Queste proprietà supportano gli schemi progettuali MVVM (Model-View-ViewModel) in cui l'interfaccia ICommand è il contratto per il modo in cui interagiscono i modelli e le visualizzazioni.These properties support Model-View-ViewModel (MVVM) design patterns where the ICommand interface is the contract for how the views and models interact.

Convenzioni segnaposto XAML nei riferimenti a Windows RuntimeXAML placeholder conventions in Windows Runtime reference

Se hai esaminato uno degli argomenti di riferimento della sezione Sintassi per le API di Windows Runtime che possono usare XAML, hai probabilmente notato che la sintassi include alcuni segnaposto.If you've examined any of the Syntax section of reference topics for Windows Runtime APIs that can use XAML, you've probably seen that the syntax includes quite a few placeholders. La sintassi XAML è diversa dalla sintassi delle estensioni componente (C++/CX) di C#, Microsoft Visual Basic o Visual C++, perché la sintassi XAML è una sintassi di utilizzo.XAML syntax is different than the C#, Microsoft Visual Basic or Visual C++ component extensions (C++/CX) syntax because the XAML syntax is a usage syntax. Si tratta di un'indicazione relativa al possibile uso nei tuoi file XAML, ma senza fornire indicazioni troppo specifiche sui valori che possono essere usati.It's hinting at your eventual usage in your own XAML files, but without being over-prescriptive about the values you can use. In genere l'utilizzo descrive quindi un tipo di grammatica che unisce valori letterali e segnaposto e definisce alcuni segnaposto nella sezione Valori XAML.So usually the usage describes a type of grammar that mixes literals and placeholders, and defines some of the placeholders in the XAML Values section.

Quando vedi nomi di tipo o nomi di elemento in una sintassi XAML per una proprietà, il nome mostrato è relativo al tipo che definisce in origine la proprietà.When you see type names / element names in a XAML syntax for a property, the name that's shown is for the type that originally defines the property. Ma XAML di Windows Runtime supporta un modello di eredità di classe per classi basate su DependencyObject.But Windows Runtime XAML supports a class inheritance model for the DependencyObject-based classes. Puoi quindi spesso usare un attributo su una classe che non si trova letteralmente nella classe di definizione, ma è derivata della classe che ha definito inizialmente la proprietà/attributo.So you can often use an attribute on a class that's not literally the defining class, but instead derives from a class that first defined the property/attribute. Ad esempio, puoi impostare Visibility come attributo su qualsiasi classe derivata di UIElement usando una eredità avanzata.For example, you can set Visibility as an attribute on any UIElement derived class using a deep inheritance. Ad esempio: <Button Visibility="Visible" />.For example: <Button Visibility="Visible" />. Non prendere quindi troppo alla lettera il nome dell'elemento visualizzato nella sintassi di utilizzo XAML. La sintassi può essere valida per gli elementi che rappresentano quella classe e anche per gli elementi che rappresentano una classe derivata.So don't take the element name shown in any XAML usage syntax too literally; the syntax may be viable for elements representing that class, and also elements that represent a derived class. Nei casi in cui è raro o impossibile che il tipo mostrato come elemento di definizione sia presente in un utilizzo reale, quel nome di tipo viene specificato deliberatamente in lettere minuscole nella sintassi.In cases where it's rare or impossible for the type shown as the defining element to be in a real-world usage, that type name is deliberately lowercased in the syntax. Ad esempio, la sintassi mostrata per UIElement.Visibility è:For example, the syntax you see for UIElement.Visibility is :

<uiElement Visibility="Visible"/>
-or-
<uiElement Visibility="Collapsed"/>

Molte sezioni della sintassi XAML includono segnaposti nella sezione "Utilizzo" che sono quindi definiti in una sezione Valori XAML situata direttamente sotto la sezione Sintassi.Many XAML syntax sections include placeholders in the "Usage" that are then defined in a XAML Values section that's directly under the Syntax section.

Le sezioni di utilizzo XAML usano anche diversi segnaposto generalizzati.XAML usage sections also use various generalized placeholders. Questi segnaposti non vengono ridefiniti ogni volta in Valori XAML, perché potrai dedurre o apprendere ciò che rappresentano.These placeholders aren't redefined every time in XAML Values, because you'll guess or eventually learn what they represent. Pensiamo che la maggior parte dei lettori si stancherebbe di vederli in continuazione nella sezione Valori XAML, quindi li abbiamo esclusi dalle definizioni.We think most readers would get tired of seeing them in XAML Values again and again so we left them out of the definitions. Come riferimento, ecco un elenco di alcuni di questi segnaposto e il rispettivo significato generale:For reference, here's a list of some of these placeholders and what they mean in a general sense:

  • object: in teoria qualsiasi valore oggetto, ma spesso limitato in pratica a determinati tipi di oggetti, ad esempio una scelta stringa-oggetto. Per altre info, controlla i commenti nella pagina di riferimento.object: theoretically any object value, but often practically limited to certain types of objects such as a string-or-object choice, and you should check the Remarks on the reference page for more info.
  • object property: object property in combinazione viene usato per i casi in cui la sintassi mostrata è la sintassi per un tipo che può essere usato come valore attributo per molte proprietà.object property: object property in combination is used for cases where the syntax being shown is the syntax for a type that can be used as an attribute value for many properties. Ad esempio, la sezione Utilizzo attributo Xaml mostrata per Brush include: <object property="predefinedColorName"/>For example, the Xaml Attribute Usage shown for Brush includes: <object property="predefinedColorName"/>
  • eventhandler: viene visualizzato come valore attributo per ogni sintassi XAML mostrata per un attributo evento.eventhandler: This appears as the attribute value for every XAML syntax shown for an event attribute. In questo caso si specifica il nome funzione per una funzione di gestore eventi.What you're supplying here is the function name for an event handler function. Questa funzione deve essere definita nel code-behind per la pagina XAML.That function must be defined in the code-behind for the XAML page. A livello di programmazione, la funzione deve corrispondere alla firma delegato dell'evento che si sta gestendo. In caso contrario, non sarà possibile compilare il codice dell'app.At the programming level, that function must match the delegate signature of the event that you're handling, or your app code won't compile. Ma questa è in realtà una considerazione a livello di programmazione, non a livello di XAML, quindi non desideriamo fornire indicazioni sul tipo di delegati nella sintassi XAML.But that's really a programming consideration, not a XAML consideration, so we don't try to hint anything about the delegate type in the XAML syntax. Per sapere quale delegato dovrebbe essere implementato per un evento, vedi la sezione Informazioni evento dell'argomento di riferimento per l'evento, in una riga di tabella con etichetta Delegato.If you want to know which delegate you should be implementing for an event, that's in the Event information section of the reference topic for the event, in a table row that's labeled Delegate.
  • enumMemberName: mostrato nella sintassi di attributo per tutte le enumerazioni.enumMemberName: shown in attribute syntax for all enumerations. È disponibile un segnaposto simile per proprietà che usano un valore di enumerazione, ma in genere usa come prefisso del segnaposto un suggerimento del nome dell'enumerazione.There's a similar placeholder for properties that use an enumeration value, but it usually prefixes the placeholder with a hint of the enumeration's name. La sintassi illustrata per FrameworkElement. FlowDirection , ad esempio, è <*FrameworkElement *FlowDirection= "* flowDirectionMemberName *"/>.For example, the syntax shown for FrameworkElement.FlowDirection is <frameworkElement*FlowDirection=" flowDirectionMemberName*"/>. Se stai visualizzando una di queste pagine di riferimento della proprietà, fai clic sul collegamento per il tipo di enumerazione visualizzato nella sezione Valore proprietà, accanto al testo Tipo:.If you're on one of those property reference pages, click the link to the enumeration type that appears in the Property Value section, next to the text Type:. Per il valore di attributo di una proprietà che usa quella enumerazione, puoi usare qualsiasi stringa elencata nella colonna Membro dell'elenco Membri.For the attribute value of a property that uses that enumeration, you can use any string that is listed in the Member column of the Members list.
  • double, int, string, bool: tipi primitivi noti al linguaggio XAML.double, int, string, bool: These are primitive types known to the XAML language. Se esegui la programmazione con C# o Visual Basic, questi tipi vengono proiettati in tipi equivalenti di Microsoft .NET, ad esempio Double, Int32, String e Boolean, e potrai usare qualsiasi membro in questi tipi .NET quando usi i valori definiti da XAML nel code-behind .NET.If you're programming using C# or Visual Basic, these types are projected to Microsoft .NET equivalent types such as Double, Int32, String and Boolean, and you can use any members on those .NET types when you work with your XAML-defined values in .NET code-behind. Se esegui la programmazione con C++/CX, userai i tipi primitivi C++, ma puoi anche valutare questi valori equivalenti ai tipi definiti dallo spazio dei nomi Platform, ad esempio Platform::String.If you're programming using C++/CX, you'll use the C++ primitive types but you can also consider these equivalent to types defined by the Platform namespace, for example Platform::String. In alcuni casi è possibile che siano previste limitazioni di valore aggiuntive per proprietà specifiche.There will sometimes be additional value restrictions for particular properties. Queste limitazioni vengono però indicate nella sezione Valore proprietà o nella sezione "Commenti" e non in una sezione XAML, perché queste limitazioni sono applicabili sia agli utilizzi di codice che agli utilizzi di XAML.But you'll usually see these noted in a Property value section or Remarks section and not in a XAML section, because any such restrictions apply both to code usages and XAML usages.

Trucchi, suggerimenti e note sullo stileTips and tricks, notes on style

  • Le estensioni di markup sono illustrate in generale nella Panoramica di XAML principale.Markup extensions in general are described in the main XAML overview. L'estensione di markup che influisce maggiormente sulle indicazioni fornite in questo argomento è costituita da StaticResource (e dall'elemento ThemeResource correlato).But the markup extension that most impacts the guidance given in this topic is the StaticResource markup extension (and related ThemeResource). La funzione dell'estensione di markup StaticResource consiste nell'abilitare il factoring del codice XAML in risorse riutilizzabili che provengono da un RESOURCEDICTIONARYXAML.The function of the StaticResource markup extension is to enable factoring your XAML into reusable resources that come from a XAML ResourceDictionary. I modelli dei controlli e gli stili correlati vengono quasi sempre definiti in un oggetto ResourceDictionary.You almost always define control templates and related styles in a ResourceDictionary. In un oggetto ResourceDictionary vengono spesso specificate le parti più piccole della definizione di un modello di controllo o di uno stile specifico dell'app, ad esempio SolidColorBrush per un colore usato dall'app più di una volta per parti diverse dell'interfaccia utente.You often define the smaller parts of a control template definition or app-specific style in a ResourceDictionary too, for example a SolidColorBrush for a color that your app uses more than once for different parts of UI. Tramite StaticResource, tutte le proprietà che altrimenti richiederebbero l'utilizzo di un elemento proprietà possono essere impostate con la sintassi degli attributi.By using a StaticResource, any property that would otherwise require a property element usage to set can now be set in attribute syntax. Ma i vantaggi del factoring del codice XAML per il riutilizzo vanno ben oltre la semplificazione della sintassi a livello di pagina.But the benefits of factoring XAML for reuse go beyond just simplifying the page-level syntax. Per ulteriori informazioni, vedere la pagina relativa ai riferimenti alle risorse XAML e ResourceDictionary.For more info, see ResourceDictionary and XAML resource references.
  • Negli esempi di codice XAML troverai numerose convenzioni diverse per l'applicazione degli spazi e degli avanzamenti di riga.You'll see several different conventions for how white space and line feeds are applied in XAML examples. In particolare, esistono convenzioni diverse per la suddivisione degli elementi oggetto che includono numerosi set di attributi.In particular, there are different conventions for how to break up object elements that have a lot of different attributes set. È solo una questione di stile.That's just a matter of style. L'editor XML di Visual Studio applica alcune regole di stile predefinite durante la modifica del codice XAML, ma puoi modificare tali regole nelle impostazioni.The Visual Studio XML editor applies some default style rules when you edit XAML, but you can change these in the settings. Nei file XAML gli spazi vuoti vengono considerati significativi solo in rari casi. Per altre info, vedi XAML e spazi vuoti.There are a small number of cases where the white space in a XAML file is considered significant; for more info see XAML and whitespace.