Guia de sintaxe do XAMLXAML syntax guide

Explicamos as regras de sintaxe XAML e a terminologia que descreve as restrições ou as opções disponíveis para a sintaxe XAML.We explain XAML syntax rules and the terminology that describes the restrictions or choices available for XAML syntax. Você achará este tópico útil se for um usuário iniciante no uso da linguagem XAML, tiver interesse em se atualizar sobre a terminologia ou um aspecto da sintaxe, ou tiver curiosidade sobre o funcionamento da linguagem XAML e queira obter informações complementares e contextuais.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 é XMLXAML is XML

A Extensible Application Markup Language (XAML) tem uma sintaxe básica compilada em XML e, por definição, o que é válido em XAML deve ser válido em XML.Extensible Application Markup Language (XAML) has a basic syntax that builds on XML, and by definition valid XAML must be valid XML. Mas o XAML também tem os próprios conceitos de sintaxe que ampliam o XML.But XAML also has its own syntax concepts that extend XML. Uma determinada entidade XML pode ser válida em XML simples, mas essa sintaxe pode ter um significado diferente e mais completo enquanto XAML.A given XML entity might be valid in plain XML, but that syntax might have a different and more complete meaning as XAML. Este tópico explica esses conceitos da sintaxe XAML.This topic explains these XAML syntax concepts.

Vocabulários XAMLXAML vocabularies

Uma área em que o XAML difere da maioria dos usos de XML é que o XAML normalmente não é reforçado com um esquema, tal como um arquivo 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. É por isso que o XAML pretende ser extensível, é isso o que o "X" no acrônimo XAML significa.That's because XAML is intended to be extensible, that's what the "X" in the acronym XAML means. Quando o XAML é analisado, os elementos e os atributos que você referencia no XAML devem existir em alguma representação de código de suporte, seja nos tipos básicos definidos pelo Windows Runtime ou nos tipos que estendem ou são baseados no Tempo de Execução do Windows.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. A documentação do SDK às vezes se refere aos tipos que já estão inseridos no Tempo de Execução do Windows e podem ser usados no XAML como se fosse o vocabulário XAML para o Tempo de Execução do Windows.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. O Microsoft Visual Studio ajuda você a produzir marcação que seja válida nesse vocabulário XAML.Microsoft Visual Studio helps you to produce markup that's valid within this XAML vocabulary. O Visual Studio também pode incluir seus tipos personalizados para uso de XAML, desde que a origem desses tipos seja referenciada corretamente no projeto.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. Para saber mais sobre XAML e tipos personalizados, consulte Namespaces XAML e mapeamento de namespace.For more info about XAML and custom types, see XAML namespaces and namespace mapping.

Declaração de objetosDeclaring objects

Com frequência, os programadores pensam em termos de objetos e membros, enquanto uma linguagem de marcação é conceitualizada como elementos e atributos.Programmers often think in terms of objects and members, whereas a markup language is conceptualized as elements and attributes. Basicamente, um elemento declarado em marcação XAML se torna um objeto em uma representação de objeto em tempo de execução subjacente.In the most basic sense, an element that you declare in XAML markup becomes an object in a backing runtime object representation. Para criar um objeto de tempo de execução para seu aplicativo, declare um elemento XAML na marcação XAML.To create a run-time object for your app, you declare a XAML element in the XAML markup. O objeto é criado quando o Tempo de Execução do Windows carrega seu XAML.The object is created when the Windows Runtime loads your XAML.

Um arquivo XAML sempre tem exatamente um elemento servindo de raiz, o qual declara o objeto que será a raiz conceitual de alguma estrutura de programação, por exemplo, uma página, ou do gráfico de objeto de toda a definição de tempo de execução de um aplicativo.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.

Em termos de sintaxe XAML, há três maneiras de declarar objetos em XAML:In terms of XAML syntax, there are three ways to declare objects in XAML:

  • Diretamente, usando a sintaxe do elemento do objeto: usa marcas de abertura e fechamento para instanciar um objeto como um elemento na forma XML.Directly, using object element syntax: This uses opening and closing tags to instantiate an object as an XML-form element. Você pode usar essa sintaxe para declarar objetos raiz ou para criar objetos aninhados que definem valores de propriedade.You can use this syntax to declare root objects or to create nested objects that set property values.
  • Indiretamente, usando a sintaxe do atributo: usa um valor de cadeia de caracteres inline que tem instruções sobre como criar um objeto.Indirectly, using attribute syntax: This uses an inline string value that has instructions for how to create an object. O analisador de XAML usa essa cadeia de caracteres para definir o valor de uma propriedade como um valor de referência recém-criado.The XAML parser uses this string to set the value of a property to a newly created reference value. O suporte a ele é limitado a determinados objetos e propriedades comuns.Support for it is limited to certain common objects and properties.
  • Usando uma extensão de marcação.Using a markup extension.

Isso não significa que você sempre terá a opção de qualquer sintaxe para criação de objetos em um vocabulário XAML.This does not mean that you always have the choice of any syntax for object creation in a XAML vocabulary. Alguns objetos podem ser criados apenas com o uso da sintaxe de elemento de objeto.Some objects can be created only by using object element syntax. Outros podem ser criados apenas com a definição inicial em um atributo.Some objects can be created only by being initially set in an attribute. Na realidade, os objetos que podem ser criados com a sintaxe de atributo ou de elemento de objeto são relativamente raros nos vocabulários XAML.In fact, objects that can be created with either object element or attribute syntax are comparatively rare in XAML vocabularies. Mesmo se ambas as formas de sintaxe forem possíveis, uma delas será mais comum por uma questão de estilo.Even if both syntax forms are possible, one of the syntaxes will be more common as a matter of style. Também há técnicas que podem ser usadas em XAML para referenciar objetos existentes, em vez de criar novos valores.There are also techniques you can use in XAML to reference existing objects rather than creating new values. Os objetos existentes podem ser definidos em outras áreas da XAML ou existir implicitamente por meio de algum comportamento da plataforma e de seus aplicativos ou modelos de programação.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.

Declaração de um objeto usando a sintaxe de elemento de objetoDeclaring an object by using object element syntax

Para declarar um objeto com a sintaxe de elemento de objeto, você cria marcas como esta: <objectName> </objectName>, onde objectName é o nome do tipo do objeto que você deseja instanciar.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. A seguir está um uso de elemento de objeto para declarar um objeto Canvas:Here's object element usage to declare a Canvas object:

<Canvas>
</Canvas>

Se o objeto não contiver outros objetos, você poderá declarar o elemento Object usando uma marca de fechamento automático em vez de um par de abertura/fechamento: <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 />

ContêineresContainers

Muitos objetos usados como elementos da interface do usuário, como o Canvas, podem conter outros objetos.Many objects used as UI elements, such as Canvas, can contain other objects. Eles ocasionalmente são chamados de contêineres.These are sometimes referred to as containers. O exemplo a seguir mostra um contêiner Canvas com um elemento, um Rectangle.The following example shows a Canvas container that contains one element, a Rectangle.

<Canvas>
  <Rectangle />
</Canvas>

Declaração de um objeto usando a sintaxe de atributoDeclaring an object by using attribute syntax

Como esse comportamento está relacionado à configuração da propriedade, falaremos mais sobre isso nas seções seguintes.Because this behavior is tied to property setting, we'll talk about this more in upcoming sections.

Texto de inicializaçãoInitialization text

Para alguns objetos, você pode declarar novos valores usando o texto interno utilizado como valores de inicialização para construção.For some objects you can declare new values using inner text that's used as initialization values for construction. Em XAML, essa técnica e sintaxe é chamada de texto de inicialização.In XAML, this technique and syntax is called initialization text. Conceitualmente, o texto de inicialização é semelhante a chamar um construtor que tem parâmetros.Conceptually, initialization text is similar to calling a constructor that has parameters. O texto de inicialização é útil para definir os valores iniciais de certas estruturas.Initialization text is useful for setting initial values of certain structures.

Normalmente você usa uma sintaxe de elemento de objeto com texto de inicialização se você quer um valor de estrutura com x:Key, para que ele possa existir em 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. Você poderá fazer isso se compartilhar o valor dessa estrutura entre várias propriedades de destino.You might do this if you share that structure value among multiple target properties. Para algumas estruturas, não é possível usar a sintaxe do atributo para definir os valores da estrutura: o texto de inicialização é a única maneira de produzir um recurso CornerRadius, Thickness, GridLength ou Color útil e compartilhável.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.

Este exemplo abreviado usa o texto de inicialização para especificar valores para Thickness, especificando neste caso valores que definem Esquerda e Direita como 20, e Superior e Inferior como 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. Este exemplo mostra a Espessura criada como um recurso inserido e, em seguida, a referência para esse recurso.This example shows the Thickness created as a keyed resource, and then the reference to that resource. Para saber mais sobre o texto de inicialização de Espessura, veja Espessura.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 ...>

Observação    Algumas estruturas não podem ser declaradas como elementos de objeto.Note  Some structures can't be declared as object elements. Não há suporte ao texto de inicialização e eles não podem ser usados como recursos.Initialization text isn't supported and they can't be used as resources. Você deve usar uma sintaxe de atributo para definir as propriedades com esses valores em XAML.You must use an attribute syntax in order to set properties to these values in XAML. Esses tipos são: Duration, RepeatBehavior, Point, Rect e Size.These types are: Duration, RepeatBehavior, Point, Rect and Size.

Definir propriedadesSetting properties

Você pode definir propriedades de objeto declarados usando a sintaxe de elemento de objeto.You can set properties on objects that you declared by using object element syntax. Há muitas maneiras de definir propriedades em XAML:There are multiple ways to set properties in XAML:

  • Por meio da sintaxe de atributo.By using attribute syntax.
  • Por meio da sintaxe de elemento de propriedade.By using property element syntax.
  • Por meio da sintaxe de elemento, onde o conteúdo (texto interno ou elementos filho) define a propriedade de conteúdo XAML de um objeto.By using element syntax where the content (inner text or child elements) is setting the XAML content property of an object.
  • Por meio de uma sintaxe de coleção (geralmente, a sintaxe de coleção implícita).By using a collection syntax (which is usually the implicit collection syntax).

Assim como a declaração de objeto, essa lista não implica que nenhuma propriedade poderia ser definida com cada uma das técnicas.As with object declaration, this list doesn't imply that any property could be set with each of the techniques. Algumas propriedades dão suporte para apenas uma das técnicas.Some properties support only one of the techniques. Algumas propriedades dão suporte a mais de uma forma; por exemplo, há propriedades que podem usar sintaxe de elemento de propriedade ou sintaxe de atributo.Some properties support more than one form; for example, there are properties that can use property element syntax, or attribute syntax. O que é possível depende da propriedade e do tipo de objeto usado por ela.What's possible depends both on the property and on the object type that the property uses. Na referência da API do Tempo de Execução do Windows, você verá os usos de XAML possíveis na seção Sintaxe.In the Windows Runtime API reference, you'll see the XAML usages you can use in the Syntax section. Às vezes, existe um uso alternativo que funcionaria mas seria muito detalhado.Sometimes there is an alternative usage that would work but would be more verbose. Esses usos detalhados nem sempre são mostrados porque estamos tentando mostrar as práticas recomendadas ou os cenários da vida real para uso dessa propriedade no 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. A diretriz da sintaxe XAML é fornecida nas seções Uso de XAML das páginas de referência das propriedades que podem ser definidas no XAML.Guidance for XAML syntax is provided in the XAML Usage sections of reference pages for properties that can be set in XAML.

Algumas propriedades em objetos não podem ser definidas em XAML por nenhum meio e só podem ser definidas usando código.Some properties on objects cannot be set in XAML by any means, and can only be set using code. Normalmente é mais apropriado trabalhar com essas propriedades em code-behind, e não em XAML.Usually these are properties that are more appropriate to work with in the code-behind, not in XAML.

Uma propriedade somente leitura não pode ser definida em XAML.A read-only property cannot be set in XAML. Mesmo em código, o tipo proprietário teria de dar suporte a alguma outra maneira de defini-lo, como uma sobrecarga de construtor, um método auxiliar ou um suporte de propriedade calculada.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. Uma propriedade calculada depende dos valores de outras propriedades configuráveis, bem como possivelmente um evento com manipulação interna; esses recursos ficam disponíveis no sistema de propriedades de dependência.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. Para saber mais sobre como as propriedades de dependência são úteis para o suporte de propriedade calculada, consulte Visão geral das propriedades de dependência.For more info on how dependency properties are useful for calculated property support, see Dependency properties overview.

A sintaxe de coleção em XAML faz parecer que você está configurando uma propriedade somente leitura, mas isso não é verdade.Collection syntax in XAML gives an appearance that you are setting a read-only property, but in fact you are not. Consulte "sintaxe da coleção", mais adiante neste tópico.See "Collection Syntax" later in this topic.

Definição de uma propriedade usando a sintaxe de atributoSetting a property by using attribute syntax

Definir um valor de atributo é a forma típica com a qual você define um valor de propriedade em uma linguagem de marcação, como XML ou 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. A definição de atributos XAML é semelhante à maneira de definir valores de atributos em XML.Setting XAML attributes is similar to how you set attribute values in XML. O nome do atributo é especificado em algum ponto dentro das marcas depois do nome do elemento, separado deste por pelo menos um espaço em branco.The attribute name is specified at any point within the tags following the element name, separated from element name by at least one whitespace. O nome do atributo é seguido de um sinal de igual.The attribute name is followed by an equals sign. O valor do atributo é inserido entre aspas.The attribute value is contained within a pair of quotes. As aspas podem ser duplas ou simples, desde que sejam correspondentes entre si, circunscrevendo o valor.The quotes can be either double quotes or single quotes so long as they match and enclose the value. O valor do atributo em si deve ser expressado como uma cadeia de caracteres.The attribute value itself must be expressible as a string. A cadeia de caracteres normalmente contém números, mas, para o XAML, todos os valores de atributo são valores de cadeia de caracteres até que o analisador XAML se envolva e faça alguma conversão básica de valores.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.

Este exemplo usa a sintaxe de quatro atributos para definir as propriedades Name, Width, Height e Fill de um objeto 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" />

Definição de uma propriedade usando a sintaxe de elemento de propriedadeSetting a property by using property element syntax

Muitas propriedades de um objeto podem ser definidas com a sintaxe de elemento de propriedade.Many properties of an object can be set by using property element syntax. Um elemento de propriedade é semelhante a este: propriedade de < objeto . property > .A property element looks like this: <object.property>.

Para usar a sintaxe de elemento de propriedade, você cria elementos de propriedade XAML para a propriedade que deseja definir.To use property element syntax, you create XAML property elements for the property that you want to set. Em XML padrão, esse elemento seria simplesmente considerado um elemento com um ponto em seu nome.In standard XML, this element would just be considered an element that has a dot in its name. No entanto, em XAML, o ponto no nome do elemento identifica o elemento como um elemento de propriedade, com a Propriedade esperada como um membro do objeto em uma implementação de modelo de objeto de backup.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. Para usar a sintaxe de elemento de propriedade, deve ser possível especificar um elemento de objeto para "preencher" as marcas de elemento de propriedade.To use property element syntax, it must be possible to specify an object element in order to "fill" the property element tags. Um elemento de propriedade sempre terá algum conteúdo (elemento único, vários elementos ou texto interno); não faz sentido ter um elemento de propriedade de fechamento automático.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.

Na gramática a seguir, property é o nome da propriedade que você deseja definir e propertyValueAsObjectElement é um único elemento de objeto, cuja expectativa é satisfazer os requisitos de tipo de valor da propriedade.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>

<objeto . do Propriedade><object.property>

propertyValueAsObjectElementpropertyValueAsObjectElement

</objeto . do Propriedade></object.property>

</object></object>

O exemplo a seguir usa a sintaxe de elemento de propriedade para definir o Fill de um Rectangle com um elemento de objeto SolidColorBrush.The following example uses property element syntax to set the Fill of a Rectangle with a SolidColorBrush object element. (Em SolidColorBrush, Color é definido como um atributo). O resultado analisado desse XAML é idêntico ao exemplo anterior de XAML que define Fill usando a sintaxe de atributo.(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>

Vocabulários XAML e programação orientada a objetoXAML vocabularies and object-oriented programming

As propriedades e eventos como aparecem enquanto membros XAML de um tipo XAML do Windows Runtime normalmente são herdadas de tipos base.Properties and events as they appear as XAML members of a Windows Runtime XAML type are often inherited from base types. Considere este exemplo: <Button Background="Blue" .../>Consider this example: <Button Background="Blue" .../>. A propriedade Background não é uma propriedade declarada imediatamente na classe Button.The Background property is not an immediately declared property on the Button class. Em vez disso, Background é herdado da classe base Control.Instead, Background is inherited from the base Control class. Na realidade, se você analisar o tópico de referência de Button verá que as listas de membros contêm pelo menos um membro herdado de cada uma das classes base sucessivas: 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. Na lista Propriedades, todas as propriedades somente leitura e as propriedades de coleção são herdadas em um sentido de vocabulário XAML.In the Properties list, all the read-write properties and collection properties are inherited in a XAML vocabulary sense. Eventos (como os vários eventos UIElement) também são herdados.Events (like the various UIElement events) are inherited too.

Se você usar a referência de Windows Runtime para diretriz XAML, o nome do elemento mostrado numa sintaxe ou mesmo em exemplo de código às vezes será para o tipo que originariamente define a propriedade, porque esse tópico de referência é compartilhado por todos os tipos possíveis que o herdam de uma 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 você usar o IntelliSense para XAML do Visual Studio no editor de XML, o IntelliSense e seus menus suspensos farão um excelente trabalho de unir a herança e fornecer uma precisa lista de atributos disponíveis para configuração, depois que você começar um elemento de objeto para uma instância de 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.

Propriedades de conteúdo XAMLXAML content properties

Alguns tipos definem uma de suas propriedades para que ela permita a sintaxe de conteúdo XAML.Some types define one of their properties such that the property enables a XAML content syntax. Para a propriedade de conteúdo XAML de um tipo, você pode omitir o elemento da propriedade em questão ao especificá-lo em XAML.For the XAML content property of a type, you can omit the property element for that property when specifying it in XAML. Como alternativa, você pode definir a propriedade como um valor de texto interno, inserindo esse texto interno diretamente nas marcas de elemento de objeto do tipo proprietário.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. As propriedades de conteúdo XAML dão suporte a sintaxe de marcação simples dessa propriedade e tornam o XAML mais legível aos humanos com a redução do aninhamento.XAML content properties support straightforward markup syntax for that property and makes the XAML more human-readable by reducing the nesting.

Se uma sintaxe de conteúdo XAML estiver disponível, essa sintaxe será mostrada nas seções "XAML" da Sintaxe dessa propriedade na documentação de referência do Windows Runtime.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. Por exemplo, a página de propriedade Child para Border mostra a sintaxe de conteúdo XAML em vez da sintaxe de elemento de propriedade para definir o valor Border.Child de objeto único d Border, assim: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 a propriedade declarada como propriedade de conteúdo XAML for o tipo Object ou o tipo String, a sintaxe de conteúdo XAML dará suporte ao que é basicamente texto interno no modelo de documento XML: uma cadeia de caracteres entre as marcas de objeto de abertura e fechamento.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. Por exemplo, a página de propriedade Text de TextBlock mostra a sintaxe de conteúdo XAML que tem um valor de texto interno para definir Text, mas a cadeia de caracteres "Text" nunca aparece na marcação.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. Aqui está um uso de exemplo:Here's an example usage:

<TextBlock>Hello!</TextBlock>

Se existir uma propriedade de conteúdo XAML para uma classe, isso será indicado no tópico de referência da classe, na seção "Atributos".If a XAML content property exists for a class, that's indicated in the reference topic for the class, in the "Attributes" section. Procure o valor do ContentPropertyAttribute.Look for the value of the ContentPropertyAttribute. Esse atributo usa um campo nomeado "Name".This attribute uses a named field "Name". O valor de "Name" é o nome da propriedade dessa classe que é a propriedade de conteúdo XAML.The value of "Name" is the name of the property of that class that is the XAML content property. Por exemplo, na página de referência Border, você verá isto: ContentProperty("Name=Child").For example, on the Border reference page, you'll see this: ContentProperty("Name=Child").

Uma regra de sintaxe XAML importante que deve ser mencionada é que não é possível misturar a propriedade de conteúdo XAML com outros elementos de propriedade definidos no 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. A propriedade de conteúdo XAML deve ser definida inteiramente antes de quaisquer elementos de propriedade, ou inteiramente depois.The XAML content property must be set entirely before any property elements, or entirely after. Por exemplo, este é um XAML inválido: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>

Sintaxe de coleçãoCollection syntax

Todas as sintaxes mostradas até o momento definem propriedades de objetos únicos.All of the syntaxes shown thus far are setting properties to single objects. No então, vários cenários de interface do usuário exigem que um determinado elemento pai tenha diversos elementos filho.But many UI scenarios require that a given parent element can have multiple child elements. Por exemplo, uma interface do usuário de um formulário de entrada precisa de vários elementos de caixa de texto, alguns rótulos e talvez um botão "Enviar".For example, a UI for an input form needs several text box elements, some labels, and perhaps a "Submit" button. Mesmo assim, se você usasse um modelo de objeto de programação para acessar esses vários elementos, eles geralmente seriam itens de uma única propriedade de coleção, em vez de cada item ser o valor de propriedades distintas.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. A linguagem XAML dá suporte para diversos elementos filho, além de dar suporte para um modelo típico de coleção subjacente tratando as propriedades que usam um tipo de coleção como implícitas e realizando um tratamento especial para quaisquer elementos filho de um tipo de coleção.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.

Muitas propriedades de coleção também são identificadas como propriedade de conteúdo XAML da classe.Many collection properties are also identified as the XAML content property for the class. A combinação entre processamento de coleção implícito e sintaxe de conteúdo XAML com frequência é vista em tipos usados para composição de controles, como painéis, modos de exibição ou controles de item.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. Por exemplo, o exemplo a seguir mostra o XAML mais simples possível para a composição de dois elementos de interface do usuário de mesmo nível em um 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>

O mecanismo da sintaxe de coleção XAMLThe mechanism of XAML collection syntax

À primeira vista, pode parecer que o XAML está habilitando um "conjunto" de propriedades de coleção somente leitura.It might at first appear that XAML is enabling a "set" of the read-only collection property. Na verdade, o que o XAML habilita neste caso é a adição de itens a uma coleção existente.In reality, what XAML enables here is adding items to an existing collection. A linguagem e os processadores XAML que implementam suporte a XAML dependem de uma convenção de tipos de coleção subjacente para habilitar essa sintaxe.The XAML language and XAML processors implementing XAML support rely on a convention in backing collection types to enable this syntax. Normalmente há uma propriedade subjacente, como um indexador ou uma propriedade Items que faz referência a itens específicos da coleção.Typically there is a backing property such as an indexer or Items property that refers to specific items of the collection. Essa propriedade geralmente não é explícita na sintaxe XAML.Generally, that property is not explicit in the XAML syntax. Para coleções, o mecanismo subjacente para análise de XAML não é uma propriedade, mas um método. Especificamente, o método Add na maioria dos casos.For collections, the underlying mechanism for XAML parsing is not a property, but a method: specifically, the Add method in most cases. Quando o processador XAML encontra um ou mais elementos de objeto em uma sintaxe de coleção XAML, cada um desses objetos é criado com base em um elemento e, em seguida, cada novo objeto é adicionado em ordem à coleção contêiner, chamando o método Add.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 um analisador XAML adiciona itens a uma coleção, é a lógica do método Add que determina se um determinado elemento XAML tem permissão para ser um item filho do objeto de coleção.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. Muitos tipos de coleção são fortemente tipados pela implementação subjacente, o que significa que o parâmetro de entrada de Add espera que qualquer item passado deve corresponder ao tipo do parâmetro 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.

Para propriedades de coleção, tenha cuidado ao tentar especificar a coleção explicitamente como um elemento de objeto.For collection properties, be careful about when you try to specify the collection explicitly as an object element. Um analisador XAML criará um novo objeto sempre que encontrar um elemento de objeto.A XAML parser will create a new object whenever it encounters an object element. Se a propriedade de coleção que você está tentando usar for somente leitura, isso poderá gerar uma exceção da análise XAML.If the collection property you're trying to use is read-only, this can throw a XAML parse exception. Basta usar a sintaxe de coleção implícita para não ver essa exceção.Just use the implicit collection syntax, and you won't see that exception.

Quando usar a sintaxe de atributo ou de elemento de propriedadeWhen to use attribute or property element syntax

Todas as propriedades com suporte em XAML dão suporte para sintaxe de elemento de propriedade ou de atributo para configuração direta de valores, mas é possível que não deem suporte para cada sintaxe de maneira intercambiável.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. Algumas propriedades dão suporte para ambas as sintaxes e outras dão suporte para opções de sintaxe adicionais, como uma propriedade de conteúdo XAML.Some properties do support either syntax, and some properties support additional syntax options like a XAML content property. O tipo de uma sintaxe XAML compatível com uma propriedade depende do tipo de objeto que essa propriedade usa como seu tipo de propriedade.The type of XAML syntax supported by a property depends on the type of object that the property uses as its property type. Se o tipo de propriedade for um tipo primitivo, como um duplo (flutuante ou decimal), um inteiro, um booliano ou uma cadeia de caracteres, a propriedade sempre dará suporte à sintaxe de atributo.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.

Também será possível usar a sintaxe de atributo para definir uma propriedade se o tipo de objeto usado para definir essa propriedade puder ser criado por meio do processamento de uma cadeia de caracteres.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. Para primitivos, esse sempre é o caso; a conversão de tipos é inserida no analisador.For primitives, this is always the case, the type conversion is built in to the parser. Entretanto, outros tipos de objeto também podem ser criados usando uma cadeia de caracteres especificada como um valor de atributo, em vez de um elemento de objeto em um elemento de propriedade.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. Para que isso funcione, é necessário haver uma conversão de tipo subjacente, com suporte dessa propriedade específica ou com suporte geralmente para todos os valores que usam esse tipo de propriedade.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. O valor da cadeia de caracteres do atributo é usado para definir as propriedades que são importantes para a inicialização do novo valor de objeto.The string value of the attribute is used to set properties that are important for the initialization of the new object value. Um conversor de tipo específico também pode criar diferentes subclasses de um tipo de propriedade comum, dependendo de como ele exclusivamente processa informações na cadeia de caracteres.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. Os tipos de objeto que dão suporte para esse comportamento têm uma gramática especial listada na seção de sintaxe da documentação de referência.Object types that support this behavior will have a special grammar listed in the syntax section of the reference documentation. Como exemplo, a sintaxe XAML de Brush mostra como uma sintaxe de atributo pode ser usada para criar um novo valor SolidColorBrush para qualquer propriedade do tipo Brush (e há muitas propriedades Brush no XAML do Windows Runtime).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).

Lógica e regras de análise XAMLXAML parsing logic and rules

Às vezes, é elucidativo ler o XAML de maneira semelhante ao modo como um analisador XAML deve lê-lo: como um conjunto de tokens de cadeias de caracteres encontrados em ordem linear.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. Uma analisador XAML deve interpretar esses tokens sob um conjunto de regras que fazem parte da definição de como o XAML funciona.A XAML parser must interpret these tokens under a set of rules that are part of the definition of how XAML works.

Definir um valor de atributo é a forma típica com a qual você define um valor de propriedade em uma linguagem de marcação, como XML ou 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. Na sintaxe a seguir, objectName é o objeto para o qual você deseja criar uma instância, propertyName é o nome da propriedade que você deseja definir para esse objeto e propertyValue é o valor a ser definido.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>

Qualquer uma dessas sintaxes permite que você declare um objeto e defina uma propriedade para esse objeto.Either syntax enables you to declare an object and set a property on that object. Apesar de o primeiro exemplo ser um elemento único na marcação, existem etapas discretas em relação a como um processador XAML analisa essa marcação.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.

Em primeiro lugar, a presença do elemento de objeto indica que deve ser criada uma instância para um novo objeto objectName deve ser instanciado.First, the presence of the object element indicates that a new objectName object must be instantiated. Somente após essa instância existir, a propriedade de instância PropertyName pode ser definida nela.Only after such an instance exists can the instance property propertyName be set on it.

Outra regra do XAML é que os atributos de um elemento devem ser capazes de ser definidos em qualquer ordem.Another rule of XAML is that attributes of an element must be able to be set in any order. Por exemplo, não há diferença entre <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" />. A ordem de uso é uma questão de estilo.Which order you use is a matter of style.

Observação    Os designers XAML geralmente promovem convenções de ordenação se você usar superfícies de design diferentes do editor de XML, mas você pode editar livremente esse XAML posteriormente, para reordenar os atributos ou apresentar novos.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.

Propriedades anexadasAttached properties

O XAML estende o XML ao adicionar um elemento de sintaxe conhecido como propriedade anexada.XAML extends XML by adding a syntax element known as an attached property. De modo semelhante à sintaxe de elemento de propriedade, a sintaxe de propriedade anexada contém um ponto e esse ponto tem um significado especial para a análise XAML.Similar to the property element syntax, the attached property syntax contains a dot, and the dot holds special meaning to XAML parsing. Especificamente, o ponto separa o provedor da propriedade anexada e o nome da propriedade.Specifically, the dot separates the provider of the attached property, and the property name.

Em XAML, você define propriedades anexadas usando a sintaxe AttachedPropertyProvider.PropertyName Aqui está um exemplo de como definir a propriedade anexada Canvas.Left em 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>

É possível definir a propriedade anexada em elementos que não têm uma propriedade com esse nome no tipo de suporte e, sendo assim, eles funcionam de maneira semelhante a uma propriedade global ou a um atributo definido por um namespace XML diferente como o atributo 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.

No XAML do Windows Runtime, você verá as propriedades anexadas que dão suporte a estes cenários:In Windows Runtime XAML you'll see attached properties that support these scenarios:

Para saber mais, veja Visão geral de propriedades anexadas.For more info, see Attached properties overview.

Valores "{" literaisLiteral "{" values

Como o símbolo de chave de abertura { é a abertura da sequência de extensão de marcação, você usa uma sequência de escape para especificar um valor de cadeia de caracteres literal que começa com " { ".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 "{". A sequência de escape é " { } ".The escape sequence is "{}". Por exemplo, para especificar um valor de cadeia de caracteres que seja uma única chave de abertura, especifique o valor do atributo como " { } { ".For example, to specify a string value that is a single opening brace, specify the attribute value as "{}{". Você também pode usar as aspas alternativas (por exemplo, um "dentro de um valor de atributo delimitado por " ") para fornecer um { valor" "como uma cadeia de caracteres.You can also use the alternative quotation marks (for example, a ' within an attribute value delimited by "") to provide a "{" value as a string.

Observação    " \ }" também funcionará se estiver dentro de um atributo entre aspas.Note  "\}" also works if it's inside a quoted attribute.  

Valores de enumeraçãoEnumeration values

Muitas propriedades na API de Tempo de Execução do Windows usam enumerações como valores.Many properties in the Windows Runtime API use enumerations as values. Se o membro for uma propriedade de leitura-gravação, você poderá definir essa propriedade fornecendo um valor de atributo.If the member is a read-write property you can set such a property by providing an attribute value. Identifique qual valor de enumeração será usado como valor da propriedade usando o nome não qualificado do nome da constante.You identify which enumeration value to use as the value of the property by using the unqualified name of the constant name . Por exemplo, veja como definir UIElement.Visibility em XAML:<Button Visibility="Visible"/>.For example here's how to set UIElement.Visibility in XAML: <Button Visibility="Visible"/>. Aqui "Visível" como uma cadeia de caracteres é mapeado diretamente para uma constante nomeada da enumeração Visibility, Visible.Here the "Visible" as a string is directly mapped to a named constant of the Visibility enumeration, Visible.

  • Não use uma forma qualificada, pois ela não funcionará.Don't use a qualified form, it won't work. Por exemplo, este é um XAML inválido: <Button Visibility="Visibility.Visible"/>.For example, this is invalid XAML: <Button Visibility="Visibility.Visible"/>.
  • Não use o valor da constante.Don't use the value of the constant. Em outras palavras, não confie no valor inteiro da enumeração que aparece explícita ou implicitamente, dependendo de como a enumeração foi definida.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. Embora isso pareça funcionar, não é uma boa prática tanto no XAML como em código, pois você está confiando no que poderia ser um detalhe de implementação transitório.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. Por exemplo, não faça isto: <Button Visibility="1"/>.For example, don't do this: <Button Visibility="1"/>.

Observação    Em tópicos de referência para APIs que usam XAML e usam enumerações, clique no link para o tipo de enumeração na seção valor da propriedade da sintaxe.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. Isso vincula à página de enumeração na qual você descobre as constantes nomeadas referentes a essa enumeração.This links to the enumeration page where you can discover the named constants for that enumeration.

As enumerações podem ser relacionadas a sinalizador, ou seja, atribuídas com FlagsAttribute.Enumerations can be flagwise, meaning that they are attributed with FlagsAttribute. Se você precisar especificar uma combinação de valores para uma enumeração de sinalizadores como um valor de atributo XAML, use o nome de cada constante de enumeração, com uma vírgula (,) entre cada nome, sem espaços.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. Atributos do tipo sinalizador não são comuns no vocabulário XAML do Windows Runtime, mas ManipulationModes é um exemplo em que definir um valor de enumeração do tipo sinalizador em XAML não tem suporte.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.

Interfaces em XAMLInterfaces in XAML

Raramente, você verá uma sintaxe XAML em que o tipo de propriedade seja uma interface.In rare cases you'll see a XAML syntax where the type of a property is an interface. Em sistema de tipo XAML, um tipo que implementa essa interface é aceitável como um valor quando analisado.In the XAML type system, a type that implements that interface is acceptable as a value when parsed. Deve haver uma instância criada desse tipo disponível para ser usada como o valor.There must be a created instance of such a type available to serve as the value. Você vê uma interface usada como tipo na sintaxe XAML para as propriedades Command e CommandParameter de ButtonBase.You'll see an interface used as a type in the XAML syntax for Command and CommandParameter properties of ButtonBase. Essas propriedades permitem padrões de design MVVM (Model-View-ViewModel), em que a interface de ICommand é o contrato que define como os modos de exibição e os modelos interagem.These properties support Model-View-ViewModel (MVVM) design patterns where the ICommand interface is the contract for how the views and models interact.

Referência de convenções de espaço reservado XAML no Tempo de Execução do WindowsXAML placeholder conventions in Windows Runtime reference

Se você examinou algum dos tópicos da seção Sintaxe relacionados às APIs do Tempo de Execução do Windows que podem usar XAML, provavelmente viu que a sintaxe inclui alguns espaços reservados.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. A sintaxe XAML é diferente da sintaxe de extensões (C++/CX) dos componentes C#, Microsoft Visual Basic ou Visual C++, porque a sintaxe XAML é de uso.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. Ela sugere seu uso eventual de seus próprios arquivos XAML, mas sem ser muito rígida com relação aos valores que você pode utilizar.It's hinting at your eventual usage in your own XAML files, but without being over-prescriptive about the values you can use. Normalmente, o uso descreve um tipo de gramática que combina literais e espaços reservados e define alguns dos espaços reservados na seção Valores de 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 você vê nomes de tipos/elementos na sintaxe XAML de uma propriedade, o nome que aparece refere-se ao tipo que originalmente define a propriedade.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. Porém, o XAML do Windows Runtime permite um modelo de herança de classe para as classes baseadas em DependencyObject.But Windows Runtime XAML supports a class inheritance model for the DependencyObject-based classes. Dessa forma, você sempre pode usar um atributo em uma classe que não seja literalmente a classe de definição, mas que em vez disso derive da classe que definiu primeiro a propriedade/atributo.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. Por exemplo, você pode definir Visibility como um atributo em qualquer classe derivada de UIElement usando uma herança mais profunda.For example, you can set Visibility as an attribute on any UIElement derived class using a deep inheritance. Por exemplo: <Button Visibility="Visible" />.For example: <Button Visibility="Visible" />. Portanto, não entenda tão literalmente o nome do elemento mostrado em qualquer sintaxe de uso de XAML; a sintaxe pode ser viável para elementos que representam essa classe, e também elementos que representam uma classe derivada.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. Nos casos em que é raro ou impossível que o tipo mostrado como o elemento de definição seja usado em no mundo real, o nome desse tipo será deliberadamente colocado em minúsculas na sintaxe.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. Por exemplo, a sintaxe que você vê em UIElement.Visibility é:For example, the syntax you see for UIElement.Visibility is :

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

Muitas seções de sintaxe XAML incluem espaços reservados no "Uso" que depois são definidos em uma seção Valores XAML que fica logo abaixo da seção Sintaxe.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.

As seções de uso XAML também empregam diversos espaços reservados generalizados.XAML usage sections also use various generalized placeholders. Esses espaços reservados não são sempre redefinidos nos Valores XAML, já que você deduz ou eventualmente sabe o que eles representam.These placeholders aren't redefined every time in XAML Values, because you'll guess or eventually learn what they represent. Achamos que a maioria dos leitores ficaria cansada de tanto vê-los nos Valores XAML por isso os deixamos de fora das definições.We think most readers would get tired of seeing them in XAML Values again and again so we left them out of the definitions. Para referência, veja uma lista de alguns desses espaços reservados e o que eles significam em termos gerais:For reference, here's a list of some of these placeholders and what they mean in a general sense:

  • object: teoricamente, qualquer valor de objeto, mas em geral quase limitado a determinados tipos de objetos, como a opção entre cadeia de caracteres ou objeto, e você deve conferir os Comentários na página de referência para saber mais.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 junto com outros é usado nos casos em que a sintaxe mostrada refere-se a um tipo que pode ser usado como valor de atributo em várias propriedades.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. Por exemplo, o Xaml Attribute Usage mostrado para Brush inclui: <object property="predefinedColorName"/>For example, the Xaml Attribute Usage shown for Brush includes: <object property="predefinedColorName"/>
  • eventhandler: aparece como o valor de atributo de cada sintaxe XAML mostrada para um atributo de evento.eventhandler: This appears as the attribute value for every XAML syntax shown for an event attribute. O que você especifica aqui é o nome de uma função de manipulador de eventos.What you're supplying here is the function name for an event handler function. Essa função tem que ser definida no code-behind da página XAML.That function must be defined in the code-behind for the XAML page. No nível de programação, essa função tem que corresponder à assinatura do delegado do evento que você está manipulando, senão o código de seu aplicativo não vai ser compilado.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. Mas isso é realmente uma consideração de programação, e não de XAML; portanto, nós não sugerimos nada sobre o tipo de delegado na sintaxe 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. Para saber que delegado você deve implementar em um evento, veja a seção Informações do evento do tópico de referência do evento, na linha da tabela chamada Delegado.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: mostrado na sintaxe do atributo de todas as enumerações.enumMemberName: shown in attribute syntax for all enumerations. Existe um espaço reservado similar para as propriedades que usam um valor de enumeração, mas ele normalmente prefixa o espaço reservado com uma dica do nome da enumeração.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. Por exemplo, a sintaxe mostrada para FrameworkElement. FlowDirection é <*FrameworkElement *FlowDirection= "* flowDirectionMemberName *"/>.For example, the syntax shown for FrameworkElement.FlowDirection is <frameworkElement*FlowDirection=" flowDirectionMemberName*"/>. Se você está em uma dessas páginas de referência de propriedades, clique no link para o tipo de enumeração que aparece na seção Valor da Propriedade, ao lado do texto 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:. Para o valor do atributo de uma propriedade que usa essa enumeração, você pode utilizar qualquer cadeia de caracteres que esteja listada na coluna Membro da lista Membros.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: são tipos primitivos conhecidos da linguagem XAML.double, int, string, bool: These are primitive types known to the XAML language. Se você está programando com o C# ou o Visual Basic, esses tipos são projetados para tipos equivalentes do Microsoft .NET, como Double, Int32String e Boolean, e você pode usar qualquer membro nesses tipos do .NET ao trabalhar com seus valores definidos por XAML no code-behind do .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 você está programando com o C++/CX, vai usar os tipos primitivos do C++, mas também poderá considerar esses equivalentes aos tipos definidos pelo namespace da Platform, por exemplo 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. Às vezes, há outras restrições de valor para propriedades específicas.There will sometimes be additional value restrictions for particular properties. Normalmente, elas aparecem na seção Valor da propriedade ou na seção "Comentários", e não na seção XAML, porque qualquer restrição desse tipo é válida para usos de código e de 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.

Dicas e truques, anotações sobre estiloTips and tricks, notes on style

  • As extensões de marcação em geral são descritas na visão geral de XAML principal.Markup extensions in general are described in the main XAML overview. No entanto, a extensão de marcação de maior impacto nas orientações fornecidas neste tópico é a extensão de marcação StaticResource (e relacionada à ThemeResource).But the markup extension that most impacts the guidance given in this topic is the StaticResource markup extension (and related ThemeResource). A função da extensão de marcação StaticResource serve para habilitar a fatoração de seu XAML em recursos reutilizáveis provenientes de um ResourceDictionary XAML.The function of the StaticResource markup extension is to enable factoring your XAML into reusable resources that come from a XAML ResourceDictionary. Você quase sempre define os modelos de controle e os estilos relacionados em um ResourceDictionary.You almost always define control templates and related styles in a ResourceDictionary. Você normalmente define as partes menores de uma definição de modelo de controle ou um estilo específico de aplicativo em um ResourceDictionary também, por exemplo, SolidColorBrush para uma cor que seu aplicativo usa mais de uma vez para diferentes partes da interface do usuário.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. Usando StaticResource, qualquer propriedade que de outro modo exigiria a definição de um uso de elemento de propriedade agora pode ser definida em sintaxe de atributo.By using a StaticResource, any property that would otherwise require a property element usage to set can now be set in attribute syntax. Mas os benefícios da fatoração de XAML para reutilização vão além da mera simplificação da sintaxe no nível da página.But the benefits of factoring XAML for reuse go beyond just simplifying the page-level syntax. Para obter mais informações, consulte Referências de recursos de ResourceDictionary e XAML.For more info, see ResourceDictionary and XAML resource references.
  • Você verá várias convenções diferentes sobre como espaços em branco e alimentações de linha são aplicados em exemplos de XAML.You'll see several different conventions for how white space and line feeds are applied in XAML examples. Em particular, há diferentes convenções sobre como romper elementos de objeto que têm muitos atributos diferentes definidos.In particular, there are different conventions for how to break up object elements that have a lot of different attributes set. Isso é apenas uma questão de estilo.That's just a matter of style. O editor XML do Visual Studio aplica algumas regras de estilo padrão ao editar XAML, mas você pode mudá-las nas configurações.The Visual Studio XML editor applies some default style rules when you edit XAML, but you can change these in the settings. Há somente alguns casos em que o espaço em branco em um arquivo XAML é considerado significativo; para saber mais, consulte XAML e espaço em branco.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.