XAML 構文のガイドXAML syntax guide

ここでは、XAML 構文の規則と、XAML 構文に存在する制限や選択肢を説明する用語について説明します。We explain XAML syntax rules and the terminology that describes the restrictions or choices available for XAML syntax. このトピックは、XAML 言語の初心者を対象に作成されています。XAML の用語や構文の復習にも使用できます。また、XAML 言語のしくみや背景知識を知ることもできます。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

Extensible Application Markup Language (XAML) の基本的な構文は XML に基づいています。したがって、有効な XAML は有効な XML である必要があります。Extensible Application Markup Language (XAML) has a basic syntax that builds on XML, and by definition valid XAML must be valid XML. ただし、XAML には XML を拡張した独自の構文概念もあります。But XAML also has its own syntax concepts that extend XML. ある XML エンティティの構文がプレーン XML で有効であったとしても、XAML では別のより完全な意味を持つことがあります。A given XML entity might be valid in plain XML, but that syntax might have a different and more complete meaning as XAML. ここでは、次の XAML 構文の概念について説明します。This topic explains these XAML syntax concepts.

XAML ボキャブラリXAML vocabularies

XAML がほとんどの XML 応用言語と異なる点としては、XAML には通常、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. これは、XAML が拡張可能であることを目的としているためです。XAML という略語の "X" はそういう意味 (Extensible) です。That's because XAML is intended to be extensible, that's what the "X" in the acronym XAML means. XAML を解析すると、XAML で参照される要素と属性は、Windows ランタイムで定義された中核となる型、または、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. SDK ドキュメントでは、Windows ランタイムで既に定義されていて XAML で使うことのできる型を Windows ランタイムの XAML ボキャブラリと呼ぶことがあります。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 では、この XAML ボキャブラリ内で有効なマークアップを作成できます。Microsoft Visual Studio helps you to produce markup that's valid within this XAML vocabulary. Visual Studio では、カスタム型のソースがプロジェクトで正しく参照されている限り、XAML で使うカスタム型を含めることもできます。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. XAML とカスタム型について詳しくは、「XAML 名前空間と名前空間マッピング」をご覧ください。For more info about XAML and custom types, see XAML namespaces and namespace mapping.

オブジェクトの宣言Declaring objects

プログラミングの際にはオブジェクトとメンバーの観点から考えるのが一般的ですが、マークアップ言語は要素と属性で概念化されています。Programmers often think in terms of objects and members, whereas a markup language is conceptualized as elements and attributes. 最も基本的な意味においては、XAML マークアップで宣言する要素はバッキング ランタイム オブジェクト表現のオブジェクトになります。In the most basic sense, an element that you declare in XAML markup becomes an object in a backing runtime object representation. アプリのランタイム オブジェクトを作成するには、XAML マークアップで XAML 要素を宣言します。To create a run-time object for your app, you declare a XAML element in the XAML markup. オブジェクトは、Windows ランタイムによって XAML が読み込まれたときに作成されます。The object is created when the Windows Runtime loads your XAML.

XAML ファイルには、ルートとして機能する要素が常に 1 つあります。ルートは、ページなどのいくつかのプログラミング構造の概念上のルートとなるオブジェクトまたはアプリケーションのランタイム定義全体のオブジェクト グラフを宣言します。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.

XAML 構文では、次の 3 つの方法を使って XAML でオブジェクトを宣言できます。In terms of XAML syntax, there are three ways to declare objects in XAML:

  • オブジェクト要素構文を直接使用: 開始タグと終了タグを使って、オブジェクトを XML 形式の要素としてインスタンス化します。Directly, using object element syntax: This uses opening and closing tags to instantiate an object as an XML-form element. この構文を使うと、ルート オブジェクトを宣言することも、プロパティ値を設定する入れ子になったオブジェクトを作成することもできます。You can use this syntax to declare root objects or to create nested objects that set property values.
  • 属性構文を間接的に使用: オブジェクトの作成方法に関する命令が含まれるインライン文字列値を使います。Indirectly, using attribute syntax: This uses an inline string value that has instructions for how to create an object. XAML パーサーは、この文字列を使って、新しく作成した参照値にプロパティ値を設定します。The XAML parser uses this string to set the value of a property to a newly created reference value. この方法に対するサポートは、共通のオブジェクトとプロパティの一部に限定されます。Support for it is limited to certain common objects and properties.
  • マークアップ拡張を使用。Using a markup extension.

これは、XAML ボキャブラリでオブジェクトの作成用にどの構文を使うかをいつも選択できるというわけではありません。This does not mean that you always have the choice of any syntax for object creation in a XAML vocabulary. 一部のオブジェクトは、作成時にオブジェクト要素構文しか使用できません。Some objects can be created only by using object element syntax. また、オブジェクトのなかには、最初から属性に設定する方法でしか作成できないものもあります。Some objects can be created only by being initially set in an attribute. 実際、オブジェクト要素構文または属性構文のどちらを使っても作成できるというオブジェクトは、XAML ボキャブラリでは比較的まれです。In fact, objects that can be created with either object element or attribute syntax are comparatively rare in XAML vocabularies. 構文形式が両方とも使用できたとしても、スタイルとしてはどちらか一方が使われることが多くなります。Even if both syntax forms are possible, one of the syntaxes will be more common as a matter of style. また、XAML で新しい値を作成するのではなく、今あるオブジェクトを参照するために使用できる手法もあります。There are also techniques you can use in XAML to reference existing objects rather than creating new values. 今あるオブジェクトは、XAML の他の領域で定義されていることもあれば、プラットフォームとそのアプリケーションまたはプログラミング モデルの特定の動作を介して暗黙的に存在することもあります。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.

オブジェクト要素構文を使用したオブジェクトの宣言Declaring an object by using object element syntax

オブジェクト要素構文を使ってオブジェクトを宣言するには、<objectName> </objectName> のようにタグを記述します。ここで、objectName は、インスタンス化するオブジェクトの型名を表します。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. Canvas オブジェクトを宣言するためのオブジェクト要素の使用方法は次のとおりです。Here's object element usage to declare a Canvas object:

<Canvas>
</Canvas>

オブジェクトに他のオブジェクトを含めない場合は、開始タグと終了タグのペアを使う代わりに、1 つの自己終了タグ (<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 />

コンテナーContainers

UI 要素として使われるオブジェクト (Canvas など) の多くは、他のオブジェクトを格納することができます。Many objects used as UI elements, such as Canvas, can contain other objects. そのようなオブジェクトは、コンテナーとも呼ばれます。These are sometimes referred to as containers. 次の例は、要素 Rectangle を 1 つ格納している Canvas コンテナーを示しています。The following example shows a Canvas container that contains one element, a Rectangle.

<Canvas>
  <Rectangle />
</Canvas>

属性構文を使用したオブジェクトの宣言Declaring an object by using attribute syntax

この動作はプロパティの設定に関連付けられているため、次のセクションでさらに詳しく説明します。Because this behavior is tied to property setting, we'll talk about this more in upcoming sections.

初期化テキストInitialization text

一部のオブジェクトでは、構造の初期値として使われる内部テキストを使って新しい値を宣言できます。For some objects you can declare new values using inner text that's used as initialization values for construction. XAML では、この手法と構文を初期化テキストと呼びます。In XAML, this technique and syntax is called initialization text. 初期化テキストは概念的に、パラメーターを持つコンストラクターの呼び出しに似ています。Conceptually, initialization text is similar to calling a constructor that has parameters. 初期化テキストは、一部の構造体の初期値を設定するのに便利です。Initialization text is useful for setting initial values of certain structures.

構造体の値に x:Key を持たせ、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. この手法は、その構造体の値を複数のターゲット プロパティで共有する場合に使用できます。You might do this if you share that structure value among multiple target properties. 一部の構造体では、属性構文を使って構造体の値を設定することができません。このため、初期化テキストが、便利で共有可能な CornerRadiusThicknessGridLengthColor リソースを生成するための唯一の方法になります。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.

この省略された例では、初期化テキストを使って Thickness の値 (LeftRight を 20 に、TopBottom を 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. この例は、キーを持つリソースとして作成された Thickness と、そのリソースへの参照を示しています。This example shows the Thickness created as a keyed resource, and then the reference to that resource. Thickness の初期化テキストについて詳しくは、「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 ...>

メモ   一部の構造体は、オブジェクト要素として宣言できません。Note  Some structures can't be declared as object elements. 初期化テキストがサポートされておらず、リソースとして使うことができません。Initialization text isn't supported and they can't be used as resources. XAML でそれらの値にプロパティを設定するには、属性構文を使う必要があります。You must use an attribute syntax in order to set properties to these values in XAML. そのような型には、DurationRepeatBehaviorPointRectSize などがあります。These types are: Duration, RepeatBehavior, Point, Rect and Size.

プロパティの設定Setting properties

オブジェクト要素構文を使用して宣言したオブジェクトのプロパティを設定できます。You can set properties on objects that you declared by using object element syntax. XAML では、複数の方法でプロパティを設定できます。There are multiple ways to set properties in XAML:

  • 属性構文を使用する。By using attribute syntax.
  • プロパティ要素構文を使用する。By using property element syntax.
  • コンテンツ (内部テキストまたは子要素) によってオブジェクトの XAML コンテンツ プロパティが設定される要素構文を使用する。By using element syntax where the content (inner text or child elements) is setting the XAML content property of an object.
  • コレクション構文を使用する (通常は暗黙的なコレクション構文)。By using a collection syntax (which is usually the implicit collection syntax).

オブジェクトの宣言の場合と同様に、プロパティを設定する際にどの方法でも使用できるというわけではありません。As with object declaration, this list doesn't imply that any property could be set with each of the techniques. 一部のプロパティでは、1 種類の方法しかサポートされません。Some properties support only one of the techniques. プロパティのなかには、複数の形式をサポートしているものもあります。たとえば、プロパティ要素構文と属性構文のどちらも使用できるプロパティもあります。Some properties support more than one form; for example, there are properties that can use property element syntax, or attribute syntax. どれを使用できるかは、プロパティと、そのプロパティが使うオブジェクト型の両方に応じて決まります。What's possible depends both on the property and on the object type that the property uses. Windows ランタイム API リファレンスでは、「構文」セクションに、使うことができる XAML の使用方法が表示されます。In the Windows Runtime API reference, you'll see the XAML usages you can use in the Syntax section. ときには、使うことができても冗長な別の方法が存在することがあります。Sometimes there is an alternative usage that would work but would be more verbose. そのような冗長な方法は、表示されないこともあります。それは、リファレンスでは 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. XAML で設定できるプロパティのリファレンス ページにある XAML の使用方法に関するセクションに、XAML 構文に関するガイダンスが記載されています。Guidance for XAML syntax is provided in the XAML Usage sections of reference pages for properties that can be set in XAML.

オブジェクトの一部のプロパティは、何らかの方法で XAML で設定することはできず、コードを使用してのみ設定できます。Some properties on objects cannot be set in XAML by any means, and can only be set using code. このようなプロパティは通常、XAML よりコード ビハインドで使う方が適しています。Usually these are properties that are more appropriate to work with in the code-behind, not in XAML.

読み取り専用プロパティは、XAML で設定することはできません。A read-only property cannot be set in XAML. コードでも、所有する型はコンストラクター オーバーロード、ヘルパー メソッド、集計プロパティのサポートなど、他の設定方法をサポートしている必要があります。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. 集計プロパティは、設定可能な他のプロパティの値のほか、組み込み処理のあるイベントに依存することもあります。これらの機能は、依存関係プロパティ システムで使用できます。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. 集計プロパティをサポートするうえで依存関係プロパティがいかに便利であるかについて詳しくは、「依存関係プロパティの概要」をご覧ください。For more info on how dependency properties are useful for calculated property support, see Dependency properties overview.

XAML のコレクション構文の場合、一見、読み取り専用のプロパティを設定しているかのように見えますが、実際は違います。Collection syntax in XAML gives an appearance that you are setting a read-only property, but in fact you are not. このトピックで後述する「コレクションの構文」を参照してください。See "Collection Syntax" later in this topic.

属性構文によるプロパティの設定Setting a property by using attribute syntax

XML や 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. XAML 属性は、XML で属性値を設定する場合と同じように設定できます。Setting XAML attributes is similar to how you set attribute values in XML. タグで囲まれ、要素名に続く任意の場所で属性名を指定します。要素名との間は少なくとも 1 つの空白で区切ります。The attribute name is specified at any point within the tags following the element name, separated from element name by at least one whitespace. 属性名の後に、等号を挟んで、The attribute name is followed by an equals sign. 引用符で囲んだ属性値を指定します。The attribute value is contained within a pair of quotes. 引用符は、値の前後で対応していれば二重引用符と単一引用符のどちらでもかまいません。The quotes can be either double quotes or single quotes so long as they match and enclose the value. 属性値は、文字列として表現できる値である必要があります。The attribute value itself must be expressible as a string. 文字列には数字が含まれることが多いものの、XAML では、XAML パーサーが関与して基本的な値の変換を実行するまで、属性値がすべて文字列値となります。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.

この例では、4 つの属性の属性構文を使用して、Rectangle オブジェクトの NameWidthHeightFill の各プロパティを設定しています。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" />

プロパティ要素構文によるプロパティの設定Setting a property by using property element syntax

オブジェクトの多くのプロパティは、プロパティ要素構文を使って設定できます。Many properties of an object can be set by using property element syntax. Property 要素は次のようになります: < オブジェクト . プロパティ >A property element looks like this: <object.property>.

プロパティ要素構文を使うには、設定するプロパティに対応する XAML プロパティ要素を作成します。To use property element syntax, you create XAML property elements for the property that you want to set. 標準 XML の場合、この要素は、その名前にドットが含まれている要素と見なされます。In standard XML, this element would just be considered an element that has a dot in its name. ただし、XAML では、要素名のドットは、要素をプロパティ要素として識別します。 プロパティ は、バッキングオブジェクトモデルの実装の オブジェクト のメンバーである必要があります。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. プロパティ要素構文を使うには、プロパティ要素タグに "設定する" ためにオブジェクト要素を指定できる必要があります。To use property element syntax, it must be possible to specify an object element in order to "fill" the property element tags. プロパティ要素にはコンテンツ (単一の要素、複数の要素、または内部テキスト) が常に存在します。自己終了プロパティ要素を使う意味はありません。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.

次の文法では、property は設定するプロパティの名前、propertyValueAsObjectElement はプロパティの値の型の要件を満たす単一のオブジェクト要素をそれぞれ表します。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>

<オブジェクト .プロパティ><object.property>

propertyValueAsObjectElementpropertyValueAsObjectElement

</オブジェクト .プロパティ></object.property>

</object></object>

次の例では、プロパティ要素構文を使用して、SolidColorBrush オブジェクト要素で RectangleFill を設定しています The following example uses property element syntax to set the Fill of a Rectangle with a SolidColorBrush object element. (SolidColorBrush 内では Color が属性として設定されています)。この XAML を解析すると、属性構文を使用して Fill を設定した上記の XAML の例とまったく同じ結果になります。(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>

XAML ボキャブラリとオブジェクト指向のプログラミングXAML vocabularies and object-oriented programming

Windows ランタイムの XAML 型の XAML メンバーとして表示されるプロパティとイベントは、ほとんどの場合基本型から継承されます。Properties and events as they appear as XAML members of a Windows Runtime XAML type are often inherited from base types. <Button Background="Blue" .../> を例にして考えてみましょう。Consider this example: <Button Background="Blue" .../>. Background プロパティは、Button クラスで即座に宣言されるプロパティではありません。The Background property is not an immediately declared property on the Button class. 代わりに、Control 基底クラスから Background が継承されます。Instead, Background is inherited from the base Control class. 実際、Button に関するリファレンスのトピックを見ると、メンバーのリストには連続した基底クラス (ButtonBaseControlFrameworkElementUIElementDependencyObject) の各チェーンから継承されたメンバーが少なくとも 1 つ含まれることがわかります。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. [プロパティ] の一覧では、読み取り/書き込みプロパティとコレクション プロパティがすべて、XAML ボキャブラリという意味で継承されます。In the Properties list, all the read-write properties and collection properties are inherited in a XAML vocabulary sense. ほかには、イベント (さまざまな UIElement イベントなど) が継承されます。Events (like the various UIElement events) are inherited too.

XAML のガイダンスに Windows ランタイム リファレンスを使う場合には、構文やコード例に示されている要素名が、プロパティを定義する型の名前のこともあります。これは、リファレンスのそのトピックが基底クラスからプロパティを継承する型になる可能性のあるものすべてに共通するものであるためです。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. Visual Studio の XML エディターで IntelliSense for XAML を使うと、IntelliSense とそのドロップダウン リストによって継承が結合されるほか、クラス インスタンスのオブジェクト要素を開始した時点で設定に利用できる属性の正確な一覧が提供されます。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.

XAML コンテンツのプロパティXAML content properties

一部の型には、XAML コンテンツ構文を有効にするように定義されたプロパティが 1 つ含まれています。Some types define one of their properties such that the property enables a XAML content syntax. 型に XAML コンテンツ プロパティが含まれている場合には、XAML でプロパティ要素を指定するときにそのプロパティのプロパティ要素を省略できます。For the XAML content property of a type, you can omit the property element for that property when specifying it in XAML. つまり、所有する型のオブジェクト要素タグ内で直接内部テキストを指定することによって、プロパティをその内部テキストの値に設定できます。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. XAML コンテンツ プロパティでは、そのプロパティのマークアップ構文を単純化できるため、入れ子の数を少なくすることによって XAML をわかりやすくすることができます。XAML content properties support straightforward markup syntax for that property and makes the XAML more human-readable by reducing the nesting.

XAML コンテンツ構文が利用できる場合、Windows ランタイム リファレンス ドキュメントでは、該当するプロパティの「構文」の XAML に関するセクションにその構文が示されています。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. たとえば、BorderChild プロパティのページには、プロパティ要素構文の代わりに、Border の単一オブジェクト Border.Child 値を設定する XAML コンテンツ構文が示されています。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>

XAML コンテンツ プロパティとして宣言されているプロパティで、プロパティの型が ObjectString のいずれかの場合には、基本的に XML ドキュメント モデルの内部テキストになるもの (開始オブジェクト タグと終了オブジェクト タグの間の文字列) が XAML コンテンツ構文でサポートされます。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. たとえば、TextBlockText プロパティのページには、Text を設定する内部テキスト値のある XAML 構文が示されていますが、文字列 "Text" が表示されることはありません。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. 次に使用方法の例を示します。Here's an example usage:

<TextBlock>Hello!</TextBlock>

あるクラスに XAML コンテンツ プロパティが存在する場合には、そのクラスに関するリファレンス トピックの「属性」のセクションに記載されています。If a XAML content property exists for a class, that's indicated in the reference topic for the class, in the "Attributes" section. ContentPropertyAttribute の値を検索します。Look for the value of the ContentPropertyAttribute. この属性は名前の付いたフィールド、"Name" を使います。This attribute uses a named field "Name". "Name" の値は、XAML コンテンツ プロパティとなるクラスのプロパティの名前です。The value of "Name" is the name of the property of that class that is the XAML content property. たとえば、Border リファレンス ページでは、ContentProperty("Name=Child") と表示されています。For example, on the Border reference page, you'll see this: ContentProperty("Name=Child").

ここで重要になる XAML 構文の規則の 1 つは、XAML コンテンツ プロパティ要素と、その要素で設定する他のプロパティ要素は混在できないというものです。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. XAML コンテンツ プロパティは、プロパティ要素の前か、後に設定する必要があります。The XAML content property must be set entirely before any property elements, or entirely after. たとえば、このような XAML は無効です。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>

コレクション構文Collection syntax

これまでに見てきた構文はすべて、プロパティを 1 つのオブジェクトに設定しています。All of the syntaxes shown thus far are setting properties to single objects. しかし、複数の子要素を持つ親要素が必要な UI シナリオも数多くあります。But many UI scenarios require that a given parent element can have multiple child elements. たとえば、入力フォームの UI では、複数のテキスト ボックス要素、いくつかのラベル、そしておそらくは 1 つの "Submit" ボタンが必要になります。For example, a UI for an input form needs several text box elements, some labels, and perhaps a "Submit" button. それでも、プログラミング オブジェクト モデルを使用してそれらの要素にアクセスする場合は、別々のプロパティの値としてアクセスするのではなく、1 つのコレクション プロパティの項目としてアクセスするのが一般的です。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 では、複数の子要素や、一般的なバッキング コレクション モデルがサポートされています。これは、暗黙的にコレクション型を使うプロパティを扱い、コレクション型の子要素を特別な方法で処理することによって実現されます。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.

このほか、多くのコレクション プロパティが、クラスの XAML コンテンツ プロパティとして識別されます。Many collection properties are also identified as the XAML content property for the class. 暗黙的なコレクション処理と XAML コンテンツ構文を組み合わせた記述は、パネル、ビュー、項目コントロールなどのコントロールを合成するために広く使われる型によく見られます。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. たとえば、次の例は、 StackPanel内の2つのピア UI 要素を合成するために最も単純な XAML を示しています。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>

XAML コレクション構文のメカニズムThe mechanism of XAML collection syntax

最初は、XAML で読み取り専用のコレクションのプロパティを "設定" しているかのように思えます。It might at first appear that XAML is enabling a "set" of the read-only collection property. しかし、実際には、XAML によって実現されているのは、既にあるコレクションに項目を追加することです。In reality, what XAML enables here is adding items to an existing collection. XAML のサポートを実装する XAML 言語および XAML プロセッサは、この構文を有効にするためにバッキング コレクション型の規則に依存します。The XAML language and XAML processors implementing XAML support rely on a convention in backing collection types to enable this syntax. 通常は、コレクションの特定の項目を参照するインデクサーや Items プロパティなどのバッキング プロパティが存在しますが、Typically there is a backing property such as an indexer or Items property that refers to specific items of the collection. XAML 構文では、一般にそのようなプロパティは明示されません。Generally, that property is not explicit in the XAML syntax. コレクションの場合、XAML の解析の基になるメカニズムは、プロパティではなくメソッド (ほとんどの場合 Add メソッド) です。For collections, the underlying mechanism for XAML parsing is not a property, but a method: specifically, the Add method in most cases. XAML プロセッサが XAML コレクション構文内に 1 つまたは複数のオブジェクト要素を見つけると、各オブジェクトが要素から作成され、次に、コレクションの 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.

XAML パーサーによってコレクションに項目が追加されるときに、特定の XAML 要素がコレクション オブジェクトの子項目として許容されるかどうかは、Add メソッドのロジックによって決まります。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. 多くのコレクション型はバッキング実装によって厳密に型指定されているため、Add の入力パラメーターに渡される値の型が 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.

コレクション プロパティでは、オブジェクト要素としてコレクションを明示的に指定するときには注意が必要です。For collection properties, be careful about when you try to specify the collection explicitly as an object element. XAML パーサーは、オブジェクト要素を検出するたびに新しいオブジェクトを作成します。A XAML parser will create a new object whenever it encounters an object element. 使おうとしているコレクション プロパティが読み取り専用の場合には、XAML 解析で例外が発生する可能性があります。If the collection property you're trying to use is read-only, this can throw a XAML parse exception. 暗黙的なコレクション構文だけを使えば、その例外が表示されることはありません。Just use the implicit collection syntax, and you won't see that exception.

属性構文を使用する状況とプロパティ要素構文を使用する状況When to use attribute or property element syntax

XAML で設定可能なプロパティはいずれも、直接値を設定するための属性構文またはプロパティ要素構文をサポートしますが、両方の構文をサポートしない可能性もあります。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. いずれかの構文をサポートするプロパティもあれば、XAML コンテンツ プロパティなど、他の構文オプションをサポートしているプロパティもあります。Some properties do support either syntax, and some properties support additional syntax options like a XAML content property. プロパティでサポートされる XAML 構文の種類は、そのプロパティでプロパティの型として使われるオブジェクトの型によって決まります。The type of XAML syntax supported by a property depends on the type of object that the property uses as its property type. プロパティ型が double (float または decimal)、integer、Boolean、string など、プリミティブ型の場合には、そのプロパティは常に属性構文をサポートします。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.

プロパティを設定する際、その設定に使うオブジェクト型を文字列の処理によって作成できる場合も、属性構文を使用できます。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. プリミティブではこれが常に当てはまり、パーサーには型変換が組み込まれています。For primitives, this is always the case, the type conversion is built in to the parser. ただし、その他のオブジェクト型のなかにも、プロパティ要素内のオブジェクト要素ではなく、属性値として指定された文字列を使って作成できるものがあります。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. これを正しく機能させるには、基になる型変換が必要です。この型変換は、特定のプロパティでサポートされるか、該当するプロパティ型を使う値すべてでサポートされます。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. 属性の文字列値を使って、新しいオブジェクト値の初期化にとって重要なプロパティが設定されます。The string value of the attribute is used to set properties that are important for the initialization of the new object value. 型コンバーターによっては、文字列の情報を処理する方法に応じて、一般的なプロパティ型のさまざまなサブクラスが作成される可能性もあります。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. この動作をサポートするオブジェクト型は、リファレンス ドキュメントの構文のセクションに特別な文法が記載されます。Object types that support this behavior will have a special grammar listed in the syntax section of the reference documentation. たとえば、Brush の XAML 構文では、属性構文を使って Brush 型のプロパティの新しい SolidColorBrush 値を作成する方法を示しています (Windows ランタイム XAML には多数の 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).

XAML 解析のロジックと規則XAML parsing logic and rules

XAML パーサーが XAML を読み取るのと似た (文字列トークンのセットを順番に読み取っていく) 方法で XAML を読んでみると、有益な情報が得られることがあります。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. XAML パーサーは、XAML の動作に関する定義に含まれる規則に基づいて、トークンを解釈する必要があります。A XAML parser must interpret these tokens under a set of rules that are part of the definition of how XAML works.

XML や 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. 次の構文では、objectName はインスタンス化するオブジェクト、propertyName はそのオブジェクトに設定するプロパティの名前、propertyValue は設定する値をそれぞれ表します。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>

このどちらの構文でも、オブジェクトを宣言し、そのオブジェクトのプロパティを設定できます。Either syntax enables you to declare an object and set a property on that object. 最初のサンプルは、1 つのマークアップ要素ですが、このマークアップの解析は、実際には 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.

まず、オブジェクト要素があるので、新しい objectName オブジェクトをインスタンス化する必要があることがわかります。First, the presence of the object element indicates that a new objectName object must be instantiated. このようなインスタンスが存在する場合にのみ、インスタンスプロパティ propertyName を設定できます。Only after such an instance exists can the instance property propertyName be set on it.

XAML のもう 1 つの規則は、要素の属性がどのような順序でも設定できる必要があるというものです。Another rule of XAML is that attributes of an element must be able to be set in any order. たとえば、<Rectangle Height="50" Width="100" /><Rectangle Width="100" Height="50" /> の間には違いがありません。For example, there's no difference between <Rectangle Height="50" Width="100" /> and <Rectangle Width="100" Height="50" />. 順序をどちらにするかは、スタイルの問題です。Which order you use is a matter of style.

メモ   XAML デザイナーでは、XML エディター以外のデザインサーフェイスを使用する場合、順序付け規則が昇格されることがよくありますが、後でその XAML を自由に編集したり、属性の順序を変更したり、新しい属性を導入したりできます。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.

添付プロパティAttached properties

XAML は、添付プロパティと呼ばれる構文要素を追加することによって XML を拡張したものです。XAML extends XML by adding a syntax element known as an attached property. プロパティ要素構文と同様に、添付プロパティ構文にはドットが含まれます。このドットは XAML 解析にとって特別な意味があります。Similar to the property element syntax, the attached property syntax contains a dot, and the dot holds special meaning to XAML parsing. 具体的には、ドットは添付プロパティのプロバイダーとプロパティ名を区切ります。Specifically, the dot separates the provider of the attached property, and the property name.

XAML では、AttachedPropertyProvider.PropertyName 構文を使って添付プロパティを設定します。XAML で添付プロパティ Canvas.Left を設定する例を次に示します。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>

添付プロパティは、バッキング型に同じ名前のプロパティがない要素に設定できます。そのため、添付プロパティの機能は、グローバル プロパティ、または異なる XML 名前空間によって定義される属性 (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.

Windows ランタイム XAML には、次のシナリオをサポートする添付プロパティがあります。In Windows Runtime XAML you'll see attached properties that support these scenarios:

詳しくは、「添付プロパティの概要」をご覧ください。For more info, see Attached properties overview.

リテラルの "{" 値Literal "{" values

左中かっこ記号 { はマークアップ拡張シーケンスを開くため、エスケープシーケンスを使用して、"" で始まるリテラル文字列値を指定し { ます。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 "{". エスケープシーケンスは " { } " です。The escape sequence is "{}". たとえば、1つの左中かっこである文字列値を指定するには、属性値を "" として指定し { } { ます。For example, to specify a string value that is a single opening brace, specify the attribute value as "{}{". 代替引用符 (たとえば、 "" で区切られた属性値内の ' ) を使用して、" { " という値を文字列として指定することもできます。You can also use the alternative quotation marks (for example, a ' within an attribute value delimited by "") to provide a "{" value as a string.

Note    "}" に注意してください \ 。は、引用符で囲まれた属性内にある場合にも機能します。Note  "\}" also works if it's inside a quoted attribute.  

列挙値Enumeration values

Windows ランタイム API の多くのプロパティでは、値として列挙型が使われます。Many properties in the Windows Runtime API use enumerations as values. メンバーが読み取り/書き込みプロパティの場合には、属性値を指定することによって設定できます。If the member is a read-write property you can set such a property by providing an attribute value. プロパティの値に使う列挙値を指定するには、定数名の非修飾名を使います。You identify which enumeration value to use as the value of the property by using the unqualified name of the constant name . たとえば、XAML で UIElement.Visibility を設定するには、<Button Visibility="Visible"/> のように記述します。For example here's how to set UIElement.Visibility in XAML: <Button Visibility="Visible"/>. 次に、文字列として "Visible" が Visibility 列挙値、Visible の名前付きの定数に直接マップされます。Here the "Visible" as a string is directly mapped to a named constant of the Visibility enumeration, Visible.

  • 修飾された形式は機能しないので、使わないでください。Don't use a qualified form, it won't work. たとえば、<Button Visibility="Visibility.Visible"/> のような XAML は無効です。For example, this is invalid XAML: <Button Visibility="Visibility.Visible"/>.
  • 定数の値を使わないでください。Don't use the value of the constant. 要するに、列挙体の整数値に依存しないようにしてください。この整数値は、明示的または暗黙的な列挙体の定義方法に応じて変わります。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. 一見、機能しているように見えても、永続的でない実装の詳細となるものに依存しているため、XAML でもコードでも好ましくない方法です。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. たとえば、<Button Visibility="1"/> のように記述しないでください。For example, don't do this: <Button Visibility="1"/>.

メモ   XAML を使用し、列挙を使用する Api のリファレンストピックについては、「構文」の [プロパティ値] セクションで列挙型へのリンクをクリックしてください。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. 列挙体のページに移動するので、その列挙体の名前付き定数を確認できます。This links to the enumeration page where you can discover the named constants for that enumeration.

列挙体は、フラグのように機能します。つまり、FlagsAttribute で属性が設定されます。Enumerations can be flagwise, meaning that they are attributed with FlagsAttribute. フラグのように機能する列挙体の値の組み合わせを XAML 属性値として指定する必要がある場合は、各列挙体定数の名前を使います。各名前はコンマ (,) で区切り、空白文字は含めません。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. フラグのような属性は、Windows ランタイム XAML ボキャブラリでは一般的ではありませんが、それが利用できる例の 1 つが ManipulationModes で、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.

XAML でのインターフェイスInterfaces in XAML

まれに、プロパティの型がインターフェイスである XAML 構文があります。In rare cases you'll see a XAML syntax where the type of a property is an interface. XAML の型システムでは、インターフェイスを実装する型は解析時に値として許容されます。In the XAML type system, a type that implements that interface is acceptable as a value when parsed. 値として使えるように、このような型の作成済みのインスタンスが必要になります。There must be a created instance of such a type available to serve as the value. 型として使われるインターフェイスは、ButtonBaseCommandCommandParameter プロパティの XAML 構文で見ることができます。You'll see an interface used as a type in the XAML syntax for Command and CommandParameter properties of ButtonBase. これらのプロパティは、Model-View-ViewModel (MVVM) 設計パターンをサポートしています。この設計パターンでは、ICommand インターフェイスはビューとモデルがどのように相互作用するかのコントラクトです。These properties support Model-View-ViewModel (MVVM) design patterns where the ICommand interface is the contract for how the views and models interact.

Windows ランタイム リファレンスでの XAML プレースホルダーの規則XAML placeholder conventions in Windows Runtime reference

XAML を使用できる Windows ランタイム API のリファレンス トピックでいずれかの「構文」セクションを調べたことがあれば、構文にかなりの数のプレースホルダーが含まれていることに気付いたことでしょう。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. XAML 構文は使用法構文なので、C#、Microsoft Visual Basic、または Visual C++ コンポーネント拡張機能 (C++/CX) の構文とは異なります。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. 独自の XAML ファイルでの具体的な使い方を示しますが、使用できる値について説明し過ぎないようにしています。It's hinting at your eventual usage in your own XAML files, but without being over-prescriptive about the values you can use. そのため、通常は使用法としてリテラルとプレースホルダーを混ぜて文法を説明し、プレースホルダーの一部は「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.

プロパティの XAML 構文で型名または要素名が表示されている場合、それらの名前は、元はプロパティを定義する型のための名前です。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. しかし、Windows ランタイム XAML は、DependencyObject ベースのクラスのクラス継承モデルをサポートしています。But Windows Runtime XAML supports a class inheritance model for the DependencyObject-based classes. そのため、多くの場合、実際の定義クラスではなく、プロパティまたは属性を最初に定義したクラスから派生したクラスの属性を使います。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. たとえば、深い継承を使って、任意の UIElement 派生クラスの属性として Visibility を設定できます For example, you can set Visibility as an attribute on any UIElement derived class using a deep inheritance. たとえば、 <Button Visibility="Visible" />と指定します。For example: <Button Visibility="Visible" />. そのため、XAML 使用方法の構文で示されている要素名が厳密に文字どおりであるとは考えないでください。そのクラスを表す要素と、派生クラスを表す要素でも、その構文が使用できることがあります。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. 定義要素として示されている型が、現実に使うことはまれであるか不可能である場合、その型の名前は構文内で意図的に小文字にしてあります。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. たとえば、UIElement.Visibility の構文は、次のようになっています。For example, the syntax you see for UIElement.Visibility is :

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

多くの XAML 構文のセクションでは、「使用方法」にプレースホルダーが含まれており、それらは「構文」セクションのすぐ下の「XAML 値」セクションで定義されています。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.

XAML の使用方法のセクションでも、さまざまな一般化されたプレースホルダーが使われています。XAML usage sections also use various generalized placeholders. これらのプレースホルダーは、「XAML 値」で毎回再定義されるわけではありません。何を表しているかを推測したり、しだいに覚えることができるためです。These placeholders aren't redefined every time in XAML Values, because you'll guess or eventually learn what they represent. ほとんどの読者は、「XAML 値」で定義を繰り返し見ることに飽きてしまうと思われるので、定義しないままにしています。We think most readers would get tired of seeing them in XAML Values again and again so we left them out of the definitions. 参考までに、これらのプレースホルダーの一部と、それらの一般的な意味を、次の一覧に示しておきます。For reference, here's a list of some of these placeholders and what they mean in a general sense:

  • object: 理論上は任意のオブジェクト値ですが、多くの場合、実際には特定の型のオブジェクトに限定されます (文字列かオブジェクトかの選択など)。詳しくは、リファレンス ページの「解説」をご覧ください。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 の組み合わせは、示されている構文が多くのプロパティの属性値として使用できる型のための構文である場合に使われます。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. たとえば、Brush の「XAML 属性の使用方法」には、<object property="predefinedColorName"/> が含まれています。For example, the Xaml Attribute Usage shown for Brush includes: <object property="predefinedColorName"/>
  • eventhandler: これは、イベント属性のために示される各 XAML 構文の属性値を表します。eventhandler: This appears as the attribute value for every XAML syntax shown for an event attribute. これに対して指定するのは、イベント ハンドラー関数の関数名です。What you're supplying here is the function name for an event handler function. この関数は、XAML ページのコード ビハインドで定義されている必要があります。That function must be defined in the code-behind for the XAML page. プログラミングのレベルでは、その関数は処理するイベントのデリゲート シグネチャと一致する必要があり、一致しない場合はアプリのコードがコンパイルされません。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. ただし、それは実際にはプログラミングでの考慮事項であり、XAML での考慮事項ではないため、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. イベントのためにどのデリゲートを実装する必要があるかを知りたい場合は、イベントのリファレンス トピックにある「イベント情報」セクションの表で、" デリゲート" というラベルの行をご覧ください。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: すべての列挙体の属性構文に示されます。enumMemberName: shown in attribute syntax for all enumerations. 列挙値を使うプロパティのための同じようなプレースホルダーがありますが、通常は、列挙体の名前を示すプレフィックスがプレースホルダーに付けられます。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. たとえば、 system.windows.flowdirection> に対して示されている構文は <*FrameworkElement *System.windows.flowdirection>= "* flowdirection membername *"/> です。For example, the syntax shown for FrameworkElement.FlowDirection is <frameworkElement*FlowDirection=" flowDirectionMemberName*"/>. これらのプロパティのリファレンス ページで、「プロパティ値」のセクションの "型:" というテキストの横に表示される、列挙型へのリンクをクリックしてください。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:. その列挙体を使うプロパティの属性値には、「メンバー」の表の「メンバー名」列に表示される任意の文字列を使用できます。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.
  • doubleintstringbool: これらは、XAML 言語既知のプリミティブ型です。double, int, string, bool: These are primitive types known to the XAML language. C# または Visual Basic を使ってプログラミングを行う場合は、これらの型が Microsoft .NET での対応する型 (DoubleInt32StringBoolean など) に対応付けられ、XAML で定義された値を .NET コード ビハインドで扱うときには、それらの .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. C++/CX を使ってプログラミングを行う場合は、C++ のプリミティブ型を使いますが、Platform 名前空間で定義されている、それらと同等の型 (たとえば 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. 場合によっては、特定のプロパティに対して、追加の値の制限があります。There will sometimes be additional value restrictions for particular properties. しかし、そのような制限はコードの使用方法と XAML の使用方法の両方に適用されるので、それらの注は通常は「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.

スタイルに関するヒントと注意事項Tips and tricks, notes on style

  • マークアップ拡張の全般的な説明は、メインの「XAML の概要」に記載されています。Markup extensions in general are described in the main XAML overview. ただし、このトピックで示されているガイダンスに最も大きな影響を及ぼすマークアップ拡張は、StaticResource マークアップ拡張 (および関連する ThemeResource) です。But the markup extension that most impacts the guidance given in this topic is the StaticResource markup extension (and related ThemeResource). StaticResource マークアップ拡張の機能は、XAML を XAML の ResourceDictionary の再利用可能なリソースにファクタリングできるようにすることです。The function of the StaticResource markup extension is to enable factoring your XAML into reusable resources that come from a XAML ResourceDictionary. ほとんどの場合、ResourceDictionary でコントロール テンプレートと関連スタイルを定義します。You almost always define control templates and related styles in a ResourceDictionary. コントロール テンプレートの定義またはアプリ固有のスタイルの小さな部分についても、ResourceDictionary で定義します。たとえば、SolidColorBrush ではアプリが UI の各部分で何度も使う色を定義します。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. StaticResource を使うと、設定にプロパティ要素を使う必要のあるプロパティが、属性構文で設定できるようになります。By using a StaticResource, any property that would otherwise require a property element usage to set can now be set in attribute syntax. XAML をファクタリングして再利用するメリットは、ページ レベルの構文を簡略化するだけにとどまりません。But the benefits of factoring XAML for reuse go beyond just simplifying the page-level syntax. 詳細については、「 ResourceDictionary および XAML リソースの参照」を参照してください。For more info, see ResourceDictionary and XAML resource references.
  • XAML の例では、空白や改行がどのように適用されるかに関するさまざまな規則が確認できます。You'll see several different conventions for how white space and line feeds are applied in XAML examples. 特に、多くの異なる属性が設定されたオブジェクト要素の分割方法に関してはさまざまな規則があります。In particular, there are different conventions for how to break up object elements that have a lot of different attributes set. これは、単にスタイルの問題です。That's just a matter of style. Visual Studio の XML エディターでは、XAML を編集するときに既定のスタイル規則が適用されますが、設定で変更することもできます。The Visual Studio XML editor applies some default style rules when you edit XAML, but you can change these in the settings. まれではあるものの、XAML ファイル内の空白が意味を持つこともあります。このような場合について詳しくは、「XAML と空白」をご覧ください。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.