XAML の概要 (WPF)XAML overview (WPF)

このトピックでは、XAML 言語の機能について説明し、記述する XAML を使用する方法を示してWindows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)アプリケーション。This topic describes the features of the XAML language and demonstrates how you can use XAML to write Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) applications. このトピックでは XAML を具体的には説明によって実装されるWPFWPFします。This topic specifically describes XAML as implemented by WPFWPF. XAML 自体よりも大きく、言語の概念は、WPFWPFします。XAML itself is a larger language concept than WPFWPF.

XAML とは何ですか。What is XAML?

XAML は、宣言型マークアップ言語です。XAML is a declarative markup language. .NET Framework のプログラミング モデルに適用される、XAML が作成を簡素化、 UIUI .NET Framework アプリケーション用。As applied to the .NET Framework programming model, XAML simplifies creating a UIUI for a .NET Framework application. 表示を作成するUIUI宣言型の XAML マークアップでと、別の要素、UIUI部分クラス定義を通じてマークアップに参加している、分離コード ファイルを使用して、実行時のロジックを定義します。You can create visible UIUI elements in the declarative XAML markup, and then separate the UIUI definition from the run-time logic by using code-behind files, joined to the markup through partial class definitions. XAML は、直接バッキング アセンブリで定義されている型の特定のセット内のオブジェクトのインスタンス化を表します。XAML directly represents the instantiation of objects in a specific set of backing types defined in assemblies. これは、ほとんどのマークアップ言語は、バッキング型システムに直接結合せずインタープリター言語では通常とは異なりします。This is unlike most other markup languages, which are typically an interpreted language without such a direct tie to a backing type system. XAML により、別のパーティが取り組むことができます、ワークフロー、UIUIと異なる可能性のあるツールを使用して、アプリケーションのロジック。XAML enables a workflow where separate parties can work on the UIUI and the logic of an application, using potentially different tools.

テキストとして表され、XAML ファイルがある一般的に XML ファイル、.xaml拡張機能。When represented as text, XAML files are XML files that generally have the .xaml extension. ファイルは、任意の XML エンコードしますが、utf-8 は一般的なエンコードでエンコードできます。The files can be encoded by any XML encoding, but encoding as UTF-8 is typical.

次の例は、ボタンの一部として作成する方法を示しています、UIUIします。The following example shows how you might create a button as part of a UIUI. この例の目的は XAML の一般的な表示方法のフレーバーを指定するだけUIUIプログラミング メタファ (でない完全なサンプル)。This example is just intended to give you a flavor of how XAML represents common UIUI programming metaphors (it is not a complete sample).

<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

XAML 構文の概要XAML syntax in brief

次のセクションでは、XAML 構文の基本的な形式を説明し、短いマークアップの例を提供します。The following sections explain the basic forms of XAML syntax, and give a short markup example. これらのセクションは、これらバッキング型システムでの表現方法など、それぞれの構文形式の完全な情報を提供するものはありません。These sections are not intended to provide complete information about each syntax form, such as how these are represented in the backing type system. このトピックで導入された構文の各の XAML 構文の仕様の詳細については、次を参照してください。 XAML 構文の詳細します。For more information about the specifics of XAML syntax for each of the syntax forms introduced in this topic, see XAML Syntax In Detail.

次のセクションでは、いくつかの内容の大半は、XML 言語に精通していれば、基本になります。Much of the material in the next few sections will be elementary to you, if you have previous familiarity with the XML language. これは、XAML の基本的な設計原則の 1 つの結果です。This is a consequence of one of the basic design principles of XAML. XAML 言語には、独自の概念が定義されていますが、これらの概念が XML 言語とマークアップ フォーム内で機能します。The XAML language defines concepts of its own, but these concepts work within the XML language and markup form.

XAML オブジェクト要素XAML object elements

オブジェクトの要素は、通常、型のインスタンスを宣言します。An object element typically declares an instance of a type. その型は、言語として XAML を使用しているテクノロジの場合、バッキング型を提供するアセンブリで定義されます。That type is defined in the assemblies that provide the backing types for a technology that uses XAML as a language.

オブジェクト要素構文は、常に角かっこで始まります (<)。Object element syntax always starts with an opening angle bracket (<). これは、後が型の名前でインスタンスを作成します。This is followed by the name of the type where you want to create an instance. (名前は、プレフィックス、後で説明した概念を含めることができます可能性があります)。その後、オブジェクト要素の属性をオプションで宣言できます。(The name can possibly include a prefix, a concept that will be explained later.) After this, you can optionally declare attributes on the object element. オブジェクトの要素を完了するには、終わりの山かっこ (>) で終了します。To complete the object element tag, end with a closing angle bracket (>). 代わりにスラッシュでタグを完了し、終わり山かっこを連続して、任意のコンテンツを含まない自己終了のフォームを使用することができます (/>)。You can instead use a self-closing form that does not have any content, by completing the tag with a forward slash and closing angle bracket in succession (/>). たとえば、先ほどのマークアップ スニペットは、もう一度見てください。For example, look at the previously shown markup snippet again:

<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

2 つのオブジェクトの要素を指定します: <StackPanel> (コンテンツ、および終了タグを後で) 使用し、 <Button .../> (自己終了フォーム、いくつかの属性を持つ)。This specifies two object elements: <StackPanel> (with content, and a closing tag later), and <Button .../> (the self-closing form, with several attributes). オブジェクト要素StackPanelButtonで定義されているクラスの名前には、各マップWPFWPFの一部となって、WPFWPFアセンブリ。The object elements StackPanel and Button each map to the name of a class that is defined by WPFWPF and is part of the WPFWPF assemblies. オブジェクト要素タグを指定する場合は、XAML の新しいインスタンスを作成する処理の命令を作成します。When you specify an object element tag, you create an instruction for XAML processing to create a new instance. 各インスタンスは、解析、XAML の読み込みのときに、基になる型の既定のコンス トラクターを呼び出すことによって作成されます。Each instance is created by calling the default constructor of the underlying type when parsing and loading the XAML.

属性の構文 (プロパティ)Attribute syntax (properties)

オブジェクトのプロパティは、オブジェクト要素の属性として多くの場合、表現できます。Properties of an object can often be expressed as attributes of the object element. 属性構文では、代入演算子 (=) の後に、属性構文で設定されるプロパティを名します。An attribute syntax names the property that is being set in attribute syntax, followed by the assignment operator (=). 属性の値は常に、引用符内に含まれる文字列として指定します。The value of an attribute is always specified as a string that is contained within quotation marks.

属性構文では、最も効率の高いプロパティ設定の構文し、過去のマークアップ言語を使用していた開発者向けの使用を最も直感的な構文です。Attribute syntax is the most streamlined property setting syntax and is the most intuitive syntax to use for developers who have used markup languages in the past. たとえば、次のマークアップは赤いテキストと表示のテキストとして指定だけでなく、青色の背景を持つボタンを作成します。Contentします。For example, the following markup creates a button that has red text and a blue background in addition to display text specified as Content.

<Button Background="Blue" Foreground="Red" Content="This is a button"/>

プロパティ要素構文Property element syntax

オブジェクト要素の一部のプロパティのオブジェクトやプロパティ値を提供するために必要な情報を引用符と属性構文の文字列の制限内で適切に表現できないため、属性構文は可能であれば、ありません。For some properties of an object element, attribute syntax is not possible, because the object or information necessary to provide the property value cannot be adequately expressed within the quotation mark and string restrictions of attribute syntax. このような場合は、プロパティ要素構文と呼ばれる別の構文を使用していることができます。For these cases, a different syntax known as property element syntax can be used.

プロパティ要素の開始タグの構文は、 < typeName.propertyName>します。The syntax for the property element start tag is <typeName.propertyName>. 一般に、そのタグの内容は、プロパティの値として受け取る型のオブジェクト要素です。Generally, the content of that tag is an object element of the type that the property takes as its value . コンテンツを指定した後は、終了タグを持つプロパティ要素を閉じる必要があります。After specifying content, you must close the property element with an end tag. 終了タグの構文は、 </ typeName.propertyName>します。The syntax for the end tag is </typeName.propertyName>.

属性の構文が可能な場合は、属性構文を使用して通常方が便利ですよりコンパクトなマークアップしますが、多くの場合、スタイル、技術的な制限ではないだけで済みます。If an attribute syntax is possible, using the attribute syntax is typically more convenient and enables a more compact markup, but that is often just a matter of style, not a technical limitation. 次の例では、同じプロパティのすべてのプロパティのプロパティ要素構文を使用してこの時間が前の属性構文の例のように設定されている、Buttonします。The following example shows the same properties being set as in the previous attribute syntax example, but this time by using property element syntax for all properties of the Button.

<Button>
  <Button.Background>
    <SolidColorBrush Color="Blue"/>
  </Button.Background>
  <Button.Foreground>
    <SolidColorBrush Color="Red"/>
  </Button.Foreground>
  <Button.Content>
    This is a button
  </Button.Content>
</Button>

コレクションの構文Collection syntax

XAML 言語には、人間が読みやすいマークアップを生成するいくつかの最適化が含まれています。The XAML language includes some optimizations that produce more human-readable markup. このような 1 つの最適化をされていると、特定のプロパティはコレクション型では、その項目コレクションのプロパティの値になる一部内の子要素としてのマークアップで宣言する場合。One such optimization is that if a particular property takes a collection type, then items that you declare in markup as child elements within that property's value become part of the collection. ここで子オブジェクトの要素のコレクションは、コレクション プロパティに設定されている値です。In this case a collection of child object elements is the value being set to the collection property.

次の例の値の設定のコレクション構文を示しています、GradientStopsプロパティ。The following example shows collection syntax for setting values of the GradientStops property:

<LinearGradientBrush>  
  <LinearGradientBrush.GradientStops>  
    <!-- no explicit new GradientStopCollection, parser knows how to find or create -->  
    <GradientStop Offset="0.0" Color="Red" />  
    <GradientStop Offset="1.0" Color="Blue" />  
  </LinearGradientBrush.GradientStops>  
</LinearGradientBrush>  

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

XAML では、クラスが指定のプロパティを XAML コンテンツ プロパティの 1 つだけという言語機能を指定します。XAML specifies a language feature whereby a class can designate exactly one of its properties to be the XAML content property. そのオブジェクトの要素の子要素は、そのコンテンツのプロパティの値の設定に使用されます。Child elements of that object element are used to set the value of that content property. つまり、コンテンツのプロパティの一意に XAML マークアップでそのプロパティを設定すると、プロパティ要素を省略できよりわかりやすい親/子のメタファをマークアップを生成できます。In other words, for the content property uniquely, you can omit a property element when setting that property in XAML markup and produce a more visible parent/child metaphor in the markup.

たとえば、Borderの content プロパティを指定しますChildします。For example, Border specifies a content property of Child. 次の 2 つBorder要素は同一に扱われます。The following two Border elements are treated identically. 1 つ目は、コンテンツのプロパティの構文を利用し、省略、Border.Childプロパティ要素。The first one takes advantage of the content property syntax and omits the Border.Child property element. 2 つ目を示していますBorder.Child明示的にします。The second one shows Border.Child explicitly.

<Border>  
  <TextBox Width="300"/>  
</Border>  
<!--explicit equivalent-->  
<Border>  
  <Border.Child>  
    <TextBox Width="300"/>  
  </Border.Child>  
</Border>  

XAML 言語の規則として XAML コンテンツ プロパティの値必要がある前に、またはその他のすべてのプロパティ要素の後に、そのオブジェクト。As a rule of the XAML language, the value of a XAML content property must be given either entirely before or entirely after any other property elements on that object element. たとえば、次のマークアップはコンパイルされません。For instance, the following markup does not compile:

<Button>I am a   
  <Button.Background>Blue</Button.Background>  
  blue button</Button>  

XAML コンテンツ プロパティの詳細については、この制限は、の「XAML コンテンツ プロパティ」セクションを参照してください。 XAML 構文の詳細します。For more information about this restriction on XAML content properties, see the "XAML Content Properties" section of XAML Syntax In Detail.

テキストの内容Text content

XAML 要素の数が少ないは、その内容としてテキストを直接処理できます。A small number of XAML elements can directly process text as their content. これを有効にするには、場合は true、次の場合のいずれかの必要があります。To enable this, one of the following cases must be true:

  • クラスは、コンテンツのプロパティを宣言する必要があり、そのコンテンツ プロパティが文字列に割り当てることができるにする必要があります (タイプObject)。The class must declare a content property, and that content property must be of a type assignable to a string (the type could be Object). たとえば、いずれかContentControlを使用してContent型は、コンテンツのプロパティとしてObject、これは実用的で、次の使用法をサポートし、ContentControlなど、 Button:<Button>Hello</Button>します。For instance, any ContentControl uses Content as its content property and it is type Object, and this supports the following usage on a practical ContentControl such as a Button: <Button>Hello</Button>.

  • 型は、ケースのテキストの内容がその型コンバーターの初期化テキストとして使用される型コンバーターを宣言する必要があります。The type must declare a type converter, in which case the text content is used as initialization text for that type converter. たとえば、<Brush>Blue</Brush> のようにします。For example, <Brush>Blue</Brush>. この場合は、実際にはあまり一般的です。This case is less common in practice.

  • 種類は、既知の XAML 言語プリミティブである必要があります。The type must be a known XAML language primitive.

コンテンツのプロパティとコレクション構文の結合Content properties and collection syntax combined

次の例について考えます。Consider this example:

<StackPanel>  
  <Button>First Button</Button>  
  <Button>Second Button</Button>  
</StackPanel>  

ここでは、各Buttonの子要素は、StackPanelします。Here, each Button is a child element of StackPanel. これは、2 つのさまざまな理由で 2 つのタグを省略する効率的で直感的なマークアップです。This is a streamlined and intuitive markup that omits two tags for two different reasons.

  • 省略された StackPanel.Children プロパティ要素: StackPanelから派生したPanelします。Omitted StackPanel.Children property element: StackPanel derives from Panel. Panel 定義Panel.Childrenとしてその XAML コンテンツのプロパティ。Panel defines Panel.Children as its XAML content property.

  • 省略された UIElementCollection object 要素:Panel.Childrenプロパティには、型UIElementCollection、実装するIListOmitted UIElementCollection object element: The Panel.Children property takes the type UIElementCollection, which implements IList. コレクションの処理などの XAML のルールに基づいて、コレクションの要素タグを省略できますIListします。The collection's element tag can be omitted, based on the XAML rules for processing collections such as IList. (この場合、UIElementCollection実際にインスタンス化できないため、既定のコンス トラクターは公開されませんしているため、UIElementCollectionオブジェクトの要素をコメント アウトされた表示)。(In this case, UIElementCollection actually cannot be instantiated because it does not expose a default constructor, and that is why the UIElementCollection object element is shown commented out).

<StackPanel>  
  <StackPanel.Children>  
    <!--<UIElementCollection>-->  
    <Button>First Button</Button>  
    <Button>Second Button</Button>  
    <!--</UIElementCollection>-->  
  </StackPanel.Children>  
</StackPanel>  

属性の構文 (イベント)Attribute syntax (events)

属性構文は、メンバー プロパティではなく、イベントの場合も使用できます。Attribute syntax can also be used for members that are events rather than properties. この場合、属性の名前は、イベントの名前です。In this case, the attribute's name is the name of the event. XAML 用のイベントの WPF 実装では、属性の値は、そのイベントのデリゲートを実装するハンドラーの名前です。In the WPF implementation of events for XAML, the attribute's value is the name of a handler that implements that event's delegate. たとえば、次のマークアップがのハンドラーを割り当てます、ClickイベントをButtonマークアップで作成します。For example, the following markup assigns a handler for the Click event to a Button created in markup:

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>

イベントと WPF の XAML をこの属性の構文の例だけをよりがあります。There is more to events and XAML in WPF than just this example of the attribute syntax. たとえば、疑問に思うかもしれません何、ClickHandlerおよび定義方法を表す、ここで参照されています。For example, you might wonder what the ClickHandler referenced here represents and how it is defined. これは、近日出版予定の説明はイベントと XAML コード ビハインドこのトピックの「します。This will be explained in the upcoming Events and XAML Code-Behind section of this topic.

ケース テーブルと XAML 内の空白Case and white space in XAML

XAML は、大文字と小文字は一般にです。XAML is generally speaking case sensitive. バッキング型の解決のために、WPF の XAML は、CLR は大文字小文字を区別する、同じルールで大文字小文字を区別します。For purposes of resolving backing types, WPF XAML is case sensitive by the same rules that the CLR is case sensitive. 名前、アセンブリ内の基になる型または型のメンバーと比較した場合の機密性の高い文字種を使用してには、オブジェクトの要素、プロパティ要素、および属性名のすべてを指定してください。Object elements, property elements, and attribute names must all be specified by using the sensitive casing when compared by name to the underlying type in the assembly, or to a member of a type. XAML 言語のキーワードとプリミティブも小文字が区別されます。XAML language keywords and primitives are also case sensitive. 値は、常に大文字小文字が区別されません。Values are not always case sensitive. 値の大文字小文字の区別には、値、またはプロパティ値の型を受け取るプロパティに関連付けられている型コンバーターの動作は異なります。Case sensitivity for values will depend on the type converter behavior associated with the property that takes the value, or the property value type. 使用するプロパティなど、Boolean種類は、いずれかを実行できるtrueまたはTrueネイティブの WPF XAML パーサーは入力文字列に変換するためにのみ、同等の値としてBooleanの同等としてこれらを既に許可します。For example, properties that take the Boolean type can take either true or True as equivalent values, but only because the native WPF XAML parser type conversion for string to Boolean already permits these as equivalents.

WPF XAML プロセッサとシリアライザーを無視するか、伴わないすべての空白文字を削除しは有意の空白を正規化します。WPF XAML processors and serializers will ignore or drop all nonsignificant white space, and will normalize any significant white space. これは、XAML 仕様の空白に対する動作の既定の推奨設定と一致します。This is consistent with the default white-space behavior recommendations of the XAML specification. この動作は、通常 XAML コンテンツ プロパティ内の文字列を指定した場合ののみです。This behavior is generally only of consequence when you specify strings within XAML content properties. 簡単に言うでは、XAML スペース、改行やタブ文字を空白に変換し、領域の場合は 1 つが保持されますが、連続する文字列の両端が見つかりましたします。In simplest terms, XAML converts space, linefeed and tab characters into spaces, and then preserves one space if found at either end of a contiguous string. XAML の空白文字の処理の詳しい説明については、このトピックでは説明しません。The full explanation of XAML white-space handling is not covered in this topic. 詳細については、次を参照してください。スペースで XAML 処理します。For details, see White space processing in XAML.

マークアップ拡張機能Markup extensions

マークアップ拡張機能は、XAML 言語概念です。Markup extensions are a XAML language concept. 属性構文、中かっこの値を提供するために使用する場合 ({}) マークアップ拡張機能の使用を示します。When used to provide the value of an attribute syntax, curly braces ({ and }) indicate a markup extension usage. これにより、XAML の属性値のリテラル文字列または文字列に変換できる値のいずれかとして一般的な処理をエスケープするために処理されます。This usage directs the XAML processing to escape from the general treatment of attribute values as either a literal string or a string-convertible value.

使用される最も一般的なマークアップ拡張WPFWPFアプリケーション プログラミングはバインド、データ バインド式、およびリソースの参照に使用されるStaticResourceDynamicResourceします。The most common markup extensions used in WPFWPF application programming are Binding, used for data binding expressions, and the resource references StaticResource and DynamicResource. マークアップ拡張機能を使用すると、そのプロパティが属性構文を一般的にサポートしない場合でも、プロパティの値を指定するのに属性の構文を使用できます。By using markup extensions, you can use attribute syntax to provide values for properties even if that property does not support an attribute syntax in general. 多くの場合、マークアップ拡張機能では、中間式の型を使用して、値を遅延またはのみ実行時に存在するその他のオブジェクトを参照するなどの機能を有効にします。Markup extensions often use intermediate expression types to enable features such as deferring values or referencing other objects that are only present at run time.

たとえば、次のマークアップの値を設定します。、Styleプロパティ属性の構文を使用します。For example, the following markup sets the value of the Style property using attribute syntax. Styleプロパティのインスタンスを受け取り、Styleクラスは、既定では属性構文の文字列によってインスタンス化できませんでした。The Style property takes an instance of the Style class, which by default could not be instantiated by an attribute syntax string. この場合、属性を参照して、特定のマークアップ拡張機能がStaticResourceします。But in this case, the attribute references a particular markup extension, StaticResource. そのマークアップ拡張機能が処理されるときに、リソース ディクショナリのキー付きリソースとして既にインスタンス化されているスタイルへの参照を返します。When that markup extension is processed, it returns a reference to a style that was previously instantiated as a keyed resource in a resource dictionary.

<Page.Resources>
  <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
  <Style TargetType="Border" x:Key="PageBackground">
    <Setter Property="Background" Value="Blue"/>
  </Style>
</Page.Resources>
<StackPanel>
  <Border Style="{StaticResource PageBackground}">
  </Border>
</StackPanel>

参照を一覧表示するマークアップ拡張機能のすべての XAML は、WPF で具体的には実装を参照してください。 WPF XAML 拡張機能します。For a reference listing of all markup extensions for XAML implemented specifically in WPF, see WPF XAML Extensions. System.Xaml と .NET Framework の XAML 実装のより幅広く利用できるは、定義されているマークアップ拡張機能の参照一覧については、次を参照してくださいXAML Namespace (x:)。言語機能します。For a reference listing of the markup extensions that are defined by System.Xaml and are more widely available for .NET Framework XAML implementations, see XAML Namespace (x:) Language Features. マークアップ拡張機能の概念の詳細については、次を参照してください。マークアップ拡張機能と WPF XAMLします。For more information about markup extension concepts, see Markup Extensions and WPF XAML.

型コンバーターType converters

XAML 構文の概要 セクションで、属性の値は文字列で設定できる必要があります、示されていました。In the XAML Syntax in Brief section, it was stated that the attribute value must be able to be set by a string. その他のオブジェクト型またはプリミティブ型の値を文字列に変換する方法の基本的なネイティブの処理がに基づいて、String型自体などの型をネイティブではさらに特定の処理DateTimeまたはUriします。The basic, native handling of how strings are converted into other object types or primitive values is based on the String type itself, in addition to native processing for certain types such as DateTime or Uri. 多くWPFWPF型またはそれらの型のメンバーは、基本的な文字列属性の処理方法のより複雑なオブジェクト型のインスタンスを文字列と属性として指定できることで、動作を拡張します。But many WPFWPF types or members of those types extend the basic string attribute processing behavior, in such a way that instances of more complex object types can be specified as strings and attributes.

Thickness構造を XAML の使用状況を有効になっている型の変換を持つ型の例を示します。The Thickness structure is an example of a type that has a type conversion enabled for XAML usages. Thickness 入れ子になった四角形内での測定値を示しなどのプロパティの値として使用されますMarginします。Thickness indicates measurements within a nested rectangle and is used as the value for properties such as Margin. 型コンバーターを配置することでThickness、すべてのプロパティを使用する、Thicknessを簡単に属性として指定されるため、XAML で指定されます。By placing a type converter on Thickness, all properties that use a Thickness are easier to specify in XAML because they can be specified as attributes. 次の例の値を指定する型の変換と属性の構文を使用して、 Margin:The following example uses a type conversion and attribute syntax to provide a value for a Margin:

<Button Margin="10,20,10,30" Content="Click me"/>

前の属性構文の例は、次に相当より詳細な構文例では、場所、Marginプロパティ要素構文を含むによって設定されている代わりに、Thicknessオブジェクト要素。The previous attribute syntax example is equivalent to the following more verbose syntax example, where the Margin is instead set through property element syntax containing a Thickness object element. 4 つのプロパティのキーThickness新しいインスタンスに対して属性として設定されます。The four key properties of Thickness are set as attributes on the new instance:

<Button Content="Click me">
  <Button.Margin>
    <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
  </Button.Margin>
</Button>

注意

型変換が、唯一のパブリック型自体に既定のコンス トラクターがあるないため、サブクラスに関連することがなくその型にプロパティを設定する方法であるオブジェクトの数に制限も。There are also a limited number of objects where the type conversion is the only public way to set a property to that type without involving a subclass, because the type itself does not have a default constructor. 例としては、Cursorします。An example is Cursor.

型変換およびその使用の属性の詳細については、構文がサポートされているを参照してくださいTypeConverters および XAMLします。For more information on how type conversion and its use for attribute syntax is supported, see TypeConverters and XAML.

XAML ルート要素と XAML 名前空間XAML root elements and XAML namespaces

XAML ファイルでは、両方を適切な形式にするためには 1 つだけのルート要素がありますXMLXMLファイルと有効な XAML ファイル。A XAML file must have only one root element, in order to be both a well-formed XMLXML file and a valid XAML file. WPF アプリケーション モデルで著名な意味を持つルート要素を使用する一般的な WPF のシナリオで (たとえば、WindowまたはPageページの ResourceDictionary 、外部のディクショナリのまたはApplicationアプリケーション定義の)。For typical WPF scenarios, you use a root element that has a prominent meaning in the WPF application model (for example, Window or Page for a page, ResourceDictionary for an external dictionary, or Application for the application definition). 次の例の一般的な XAML ファイルのルート要素を示しています、 WPFWPF ページのルート要素とPageします。The following example shows the root element of a typical XAML file for a WPFWPF page, with the root element of Page.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Page>

ルート要素は、属性も含まれています。xmlnsxmlns:xします。The root element also contains the attributes xmlns and xmlns:x. これらの属性は、XAML 名前空間には、マークアップで要素として参照する型のバックアップの種類の定義が含まれている XAML プロセッサに示します。These attributes indicate to a XAML processor which XAML namespaces contain the type definitions for backing types that the markup will reference as elements. xmlns属性は、具体的には、既定の XAML 名前空間を示します。The xmlns attribute specifically indicates the default XAML namespace. 既定の XAML 名前空間内では、プレフィックスなし、マークアップ内のオブジェクトの要素を指定できます。Within the default XAML namespace, object elements in the markup can be specified without a prefix. ほとんどのWPFWPFアプリケーション シナリオとで示す例のほぼすべてのWPFWPFのセクションでは、 SDKSDK、既定の XAML 名前空間にマップされて、WPFWPF名前空間http://schemas.microsoft.com/winfx/2006/xaml/presentationhttp://schemas.microsoft.com/winfx/2006/xaml/presentationFor most WPFWPF application scenarios, and for almost all of the examples given in the WPFWPF sections of the SDKSDK, the default XAML namespace is mapped to the WPFWPF namespace http://schemas.microsoft.com/winfx/2006/xaml/presentationhttp://schemas.microsoft.com/winfx/2006/xaml/presentation. xmlns:x属性は XAML 名前空間が追加され、XAML 言語の名前空間のマップを示しますhttp://schemas.microsoft.com/winfx/2006/xamlhttp://schemas.microsoft.com/winfx/2006/xamlします。The xmlns:x attribute indicates an additional XAML namespace, which maps the XAML language namespace http://schemas.microsoft.com/winfx/2006/xamlhttp://schemas.microsoft.com/winfx/2006/xaml.

この使用法のxmlnsの使用状況と、名前空間のマッピングのスコープを定義するは、XML 1.0 仕様に一致します。This usage of xmlns to define a scope for usage and mapping of a namescope is consistent with the XML 1.0 specification. XAML 名前スコープは、XAML 名前スコープの種類で名前空間の要素がサポートされている型の解決や、XAML を解析する際にする方法について何か意味もその内のみ XML 名前空間からは異なります。XAML namescopes are different from XML namescopes only in that a XAML namescope also implies something about how the namescope's elements are backed by types when it comes to type resolution and parsing the XAML.

なお、xmlns属性は各 XAML ファイルのルート要素で厳密に必要なだけです。Note that the xmlns attributes are only strictly necessary on the root element of each XAML file. xmlns 定義は、ルート要素のすべての子孫要素に適用されます (この動作は XML 1.0 仕様で一貫性のあるもう一度xmlns)。xmlns属性は、ルートの下にあるその他の要素では許可されてもと定義の要素のすべての子孫要素に適用されます。xmlns definitions will apply to all descendant elements of the root element (this behavior is again consistent with the XML 1.0 specification for xmlns.) xmlns attributes are also permitted on other elements underneath the root, and would apply to any descendant elements of the defining element. ただし、頻繁に定義または XAML 名前空間の再定義は、読み取りが困難である XAML マークアップ スタイルで結果ことができます。However, frequent definition or redefinition of XAML namespaces can result in a XAML markup style that is difficult to read.

WPFWPF XAML プロセッサの実装には、WPF のコア アセンブリの認識のインフラストラクチャが含まれています。The WPFWPF implementation of its XAML processor includes an infrastructure that has awareness of the WPF core assemblies. WPFWPFコア アセンブリがサポートする型を含めることが知られて、WPFWPF既定の XAML 名前空間へのマッピング。The WPFWPF core assemblies are known to contain the types that support the WPFWPF mappings to the default XAML namespace. これは、プロジェクトのビルドの一部である構成により可能にビルドされ、プロジェクト システム ファイルと、WPF します。This is enabled through configuration that is part of your project build file and the WPF build and project systems. そのため、既定値として既定の XAML 名前空間を宣言するxmlnsに由来する XAML 要素を参照するために必要なは、WPFWPFアセンブリ。Therefore, declaring the default XAML namespace as the default xmlns is all that is necessary in order to reference XAML elements that come from WPFWPF assemblies.

X: プレフィックスThe x: prefix

前のルート要素例プレフィックスx:XAML 名前空間をマップするために使用されたhttp://schemas.microsoft.com/winfx/2006/xamlhttp://schemas.microsoft.com/winfx/2006/xaml、これは XAML 言語をサポートする専用の XAML 名前空間を構築します。In the previous root element example, the prefix x: was used to map the XAML namespace http://schemas.microsoft.com/winfx/2006/xamlhttp://schemas.microsoft.com/winfx/2006/xaml, which is the dedicated XAML namespace that supports XAML language constructs. これは、x:のプロジェクトのテンプレートで、例については、およびこのドキュメントでこの XAML 名前空間のマッピング プレフィックスで使用SDKSDKします。This x: prefix is used for mapping this XAML namespace in the templates for projects, in examples, and in documentation throughout this SDKSDK. XAML 言語の XAML 名前空間には、XAML で非常に頻繁に使用するいくつかのプログラミング構成要素が含まれます。The XAML namespace for the XAML language contain several programming constructs that you will use very frequently in your XAML. 最も一般的なの一覧を次にx:を使用するプログラミング構成要素のプレフィックスします。The following is a listing of the most common x: prefix programming constructs you will use:

  • X:key: 内の各リソースの一意のキーの設定、 ResourceDictionary (またはその他のフレームワークのようなディクショナリの概念)。x:Key: Sets a unique key for each resource in a ResourceDictionary (or similar dictionary concepts in other frameworks). x:Key 90% のアカウントではおそらく、x:使用法の一般的な WPF アプリケーションのマークアップに表示されます。x:Key will probably account for 90% of the x: usages you will see in a typical WPF application's markup.

  • X:class: を指定します、 CLRCLR XAML ページの分離コードを提供するクラスの名前空間とクラス名。x:Class: Specifies the CLRCLR namespace and class name for the class that provides code-behind for a XAML page. 1 つの WPF プログラミング モデルでは、分離コードをサポートするために、このようなクラスがあり、ほぼ常に表示するためx:リソースがない場合でも、マップします。You must have such a class to support code-behind per the WPF programming model, and therefore you almost always see x: mapped, even if there are no resources.

  • X:name: オブジェクト要素が処理された後は、実行時のコードで存在するインスタンスの実行時のオブジェクト名を指定します。x:Name: Specifies a run-time object name for the instance that exists in run-time code after an object element is processed. WPF 定義されている同等のプロパティを頻繁に使用する一般に、 X:nameします。In general, you will frequently use a WPF-defined equivalent property for x:Name. このようなプロパティ具体的には CLR バッキング プロパティにマップされ、したがってアプリケーションのプログラミングの方が便利で頻繁に使用するコードの実行時に初期化された XAML から名前付きの要素を検索します。Such properties map specifically to a CLR backing property and are thus more convenient for application programming, where you frequently use run time code to find the named elements from initialized XAML. このようなプロパティは、最も一般的なFrameworkElement.Nameします。The most common such property is FrameworkElement.Name. 使用することもありますX:nameと同等の WPF フレームワーク-レベルNameプロパティが特定の種類でサポートされていません。You might still use x:Name when the equivalent WPF framework-level Name property is not supported in a particular type. これは、特定のアニメーション シナリオで発生します。This occurs in certain animation scenarios.

  • X:static: プロパティを返す静的な値が、それ以外の場合は、XAML と互換性のある参照を有効にします。x:Static: Enables a reference that returns a static value that is not otherwise a XAML-compatible property.

  • X:type: 構築、Type型名の上に基づく参照。x:Type: Constructs a Type reference based on a type name. これは、属性を指定に使用TypeなどStyle.TargetTypeプロパティが頻繁にネイティブの文字列には、-に-Typeような方法で変換をX:typeマークアップ拡張機能の使用は、省略可能。This is used to specify attributes that take Type, such as Style.TargetType, although frequently the property has native string-to-Type conversion in such a way that the x:Type markup extension usage is optional.

プログラミング構成要素がある、x:プレフィックス/XAML 名前空間は一般的でないです。There are additional programming constructs in the x: prefix/XAML namespace, which are not as common. 詳細については、次を参照してくださいXAML Namespace (x:)。言語機能します。For details, see XAML Namespace (x:) Language Features.

カスタムのプレフィックスと XAML でのカスタムの型Custom prefixes and custom types in XAML

カスタムの一部として、アセンブリを指定するには、独自のカスタム アセンブリや WindowsBase、PresentationCore、PresentationFramework の WPF のコアの外部アセンブリでは、xmlnsマッピングします。For your own custom assemblies, or for assemblies outside the WPF core of PresentationCore, PresentationFramework and WindowsBase, you can specify the assembly as part of a custom xmlns mapping. XAML では、そのアセンブリからは、その型が正しく実行しようとして、XAML の使用状況をサポートするために実装されている限り、型を参照できます、します。You can then reference types from that assembly in your XAML, so long as that type is correctly implemented to support the XAML usages you are attempting.

次は、XAML マークアップでのカスタムのプレフィックス作業の非常に基本的な例です。The following is a very basic example of how custom prefixes work in XAML markup. プレフィックスcustomルート要素タグで定義され、パッケージと、アプリケーションには、特定のアセンブリにマップします。The prefix custom is defined in the root element tag, and mapped to a specific assembly that is packaged and available with the application. このアセンブリには、型が含まれているNumericUpDown、一般的な XAML の使用量だけでなく、XAML の WPF コンテンツ モデルでこの特定の時点でその挿入を許可するクラスの継承を使用してサポートするために実装されます。This assembly contains a type NumericUpDown, which is implemented to support general XAML usage as well as using a class inheritance that permits its insertion at this particular point in a WPF XAML content model. このインスタンスNumericUpDownコントロールが、オブジェクト要素として宣言されている、名前空間プレフィックスを使用して、XAML パーサーがどのような XAML を認識できるように、型を格納および型定義を含むバッキング アセンブリがあるためです。An instance of this NumericUpDown control is declared as an object element, using the prefix so that a XAML parser knows which XAML namespace contains the type, and therefore where the backing assembly is that contains the type definition.

<Page  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"  
    >  
  <StackPanel Name="LayoutRoot">  
    <custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>  
...  
  </StackPanel>  
</Page>  

XAML でのカスタムの種類の詳細については、次を参照してください。 XAML とカスタム クラスの WPFします。For more information about custom types in XAML, see XAML and Custom Classes for WPF.

XML 名前空間とアセンブリでバッキング コードの名前空間との関連付けに関する詳細については、次を参照してください。 XAML 名前空間および WPF XAML のマッピングの Namespaceします。For more information about how XML namespaces and the namespaces of the backing code in assemblies are related, see XAML Namespaces and Namespace Mapping for WPF XAML.

イベントと XAML 分離コードEvents and XAML code-behind

ほとんどWPFWPFXAML マークアップと分離コードの両方のアプリケーションで構成されます。Most WPFWPF applications consist of both XAML markup and code-behind. として書き込まれますが、XAML、プロジェクト内で、.xamlファイル、およびCLRCLRMicrosoft Visual Basic や c# などの言語が分離コード ファイルの書き込みに使用します。Within a project, the XAML is written as a .xaml file, and a CLRCLR language such as Microsoft Visual Basic or C# is used to write a code-behind file. XAML のコード ビハインドの場所がファイルの XAML ファイルは、名前空間を指定することによって識別され、クラスの XAML ファイルをマークアップ WPF プログラミングおよびアプリケーション モデルの一部としてコンパイルされるとき、 x:Class XAML のルート要素の属性です。When a XAML file is markup compiled as part of the WPF programming and application models, the location of the XAML code-behind file for a XAML file is identified by specifying a namespace and class as the x:Class attribute of the root element of the XAML.

これまでの例では、いくつかのボタンを見てきましたが、論理的な動作がまだ関連付けられていたこれらのボタンのいずれも。In the examples so far, you have seen several buttons, but none of these buttons had any logical behavior associated with them yet. オブジェクト要素の動作を追加するためのプライマリ アプリケーション レベルのメカニズムは、要素クラスの既存のイベントを使用して、実行時にそのイベントが発生したときに呼び出されるイベントの特定のハンドラーを記述するには。The primary application-level mechanism for adding a behavior for an object element is to use an existing event of the element class, and to write a specific handler for that event that is invoked when that event is raised at run time. イベント名および使用するハンドラーの名前は、ハンドラーを実装するコードが分離コードで定義されている一方、マークアップで指定されます。The event name and the name of the handler to use are specified in the markup, whereas the code that implements your handler is defined in the code-behind.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>
namespace ExampleNamespace
{
  public partial class ExamplePage
  {
    void Button_Click(object sender, RoutedEventArgs e)
    {
      Button b = e.Source as Button;
      b.Foreground = Brushes.Red;
    }
  }
}
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim b As Button = e.Source
    b.Foreground = Brushes.Red
End Sub

分離コード ファイルで CLR 名前空間を使用することに注意してくださいExampleNamespace宣言とExamplePage名前空間内の部分クラスとして。Notice that the code-behind file uses the CLR namespace ExampleNamespace and declares ExamplePage as a partial class within that namespace. これは対応して、x:Class属性の値ExampleNamespaceします。ExamplePageThis parallels the x:Class attribute value of ExampleNamespace.ExamplePage マークアップのルートで指定されました。that was provided in the markup root. WPF マークアップ コンパイラはルート要素の型からクラスを派生させることにより、コンパイル済みの XAML ファイルの部分クラスを作成します。The WPF markup compiler will create a partial class for any compiled XAML file, by deriving a class from the root element type. 分離コードも同じ部分クラスを定義しているときに、結果のコードは、同じ名前空間と、コンパイルされたアプリケーションのクラス内で組み合わされます。When you provide code-behind that also defines the same partial class, the resulting code is combined within the same namespace and class of the compiled application.

WPF における分離コードのプログラミングの要件の詳細については、「分離コード、イベント ハンドラー、および部分クラスの要件」のセクションを参照してください。分離コードと wpf XAMLします。For more information about requirements for code-behind programming in WPF, see the "Code-behind, Event Handler, and Partial Class Requirements" section of Code-Behind and XAML in WPF.

分離コード ファイルを作成したくない場合は、することもできますインライン XAML ファイルでコード。If you do not want to create a separate code-behind file, you can also inline your code in a XAML file. ただし、インライン コードは、多くの制限のある小さい汎用的な手法です。However, inline code is a less versatile technique that has substantial limitations. 詳細については、「WPF における分離コードと XAML」を参照してください。For details, see Code-Behind and XAML in WPF.

ルーティング イベントRouted events

特定のイベントの機能の基盤をWPFWPFはルーティング イベントです。A particular event feature that is fundamental to WPFWPF is a routed event. 要素がツリーのリレーションシップを介して接続している限り、別の要素で発生したイベントを処理する要素にルーティング イベントを使用します。Routed events enable an element to handle an event that was raised by a different element, as long as the elements are connected through a tree relationship. XAML 属性使用してイベント処理を指定するときに、ルーティング イベントをリッスンおよびクラスのメンバー テーブルでその特定のイベントが記載されていない要素を含む任意の要素で処理します。When specifying event handling with a XAML attribute, the routed event can be listened for and handled on any element, including elements that do not list that particular event in the class members table. これは、所有しているクラスの名前を持つイベントの名前属性を修飾することによって実現されます。This is accomplished by qualifying the event name attribute with the owning class name. たとえば、親StackPanel、進行中でStackPanel / Buttonの例は、子要素のボタンのハンドラーを登録できますClick属性を指定することによってイベントButton.Clickで、 StackPanelオブジェクト要素の属性値として、ハンドラー名。For instance, the parent StackPanel in the ongoing StackPanel / Button example could register a handler for the child element button's Click event by specifying the attribute Button.Click on the StackPanel object element, with your handler name as the attribute value. どのようにルーティング イベントの動作の詳細については、次を参照してください。ルーティング イベントの概要します。For more information about how routed events work, see Routed Events Overview.

XAML の名前付き要素XAML named elements

既定では、オブジェクト グラフを XAML オブジェクト要素を処理することによって作成されるオブジェクトのインスタンスが所有していないオブジェクト参照の一意識別子。By default, the object instance that is created in an object graph by processing a XAML object element does not possess a unique identifier or object reference. これに対し、コードでコンス トラクターを呼び出す場合ほぼ常に使用するコンス トラクターの結果構築済みのインスタンスに変数を設定するコードでインスタンスを参照できるようにします。In contrast, if you call a constructor in code, you almost always use the constructor result to set a variable to the constructed instance, so that you can reference the instance later in your code. XAML を定義するマークアップ定義によって作成されたオブジェクトの標準的なアクセスを提供するために、 X:name 属性します。In order to provide standardized access to objects that were created through a markup definition, XAML defines the x:Name attribute. 値を設定することができます、x:Name任意のオブジェクト要素の属性。You can set the value of the x:Name attribute on any object element. コードで指定した識別子は、構築済みのインスタンスを参照するインスタンス変数と同じです。In your code-behind, the identifier you choose is equivalent to an instance variable that refers to the constructed instance. オブジェクトのインスタンス (名前は、そのインスタンスを参照)、された、分離コードでは、アプリケーション内で実行時の操作を処理するには、名前付きの要素を参照できる場合とすべての点では、要素の関数の名前。In all respects, named elements function as if they were object instances (the name references that instance), and your code-behind can reference the named elements to handle run-time interactions within the application. インスタンスと変数の間には、この接続は、WPF XAML マークアップ コンパイラでは、詳細は具体的にが含まれる機能とパターンなどInitializeComponentをこのトピックで詳しくは説明しません。This connection between instances and variables is accomplished by the WPF XAML markup compiler, and more specifically involve features and patterns such as InitializeComponent that will not be discussed in detail in this topic.

WPF フレームワーク レベルの XAML 要素を継承するNameプロパティは、これは定義されている XAML に相当x:Name属性。WPF framework-level XAML elements inherit a Name property, which is equivalent to the XAML defined x:Name attribute. その他のクラスの対応するプロパティ レベルを提供もx:Name、として一般に定義されている、Nameプロパティ。Certain other classes also provide property-level equivalents for x:Name, which is also generally defined as a Name property. 見つからない場合、一般的に、Nameメンバー テーブルに、選択した要素/型を使用してプロパティx:Name代わりにします。Generally speaking, if you cannot find a Name property in the members table for your chosen element/type, use x:Name instead. x:Name値が使用できる、実行時に特定のサブシステムまたはユーティリティ メソッドのいずれかなど、XAML 要素に識別子を提供FindNameします。The x:Name values will provide an identifier to a XAML element that can be used at run time, either by specific subsystems or by utility methods such as FindName.

次の例のセットName上、StackPanel要素。The following example sets Name on a StackPanel element. ハンドラーを次に、Button内でStackPanel参照、StackPanelそのインスタンスの参照を使用してbuttonContainerによって設定Nameします。Then, a handler on a Button within that StackPanel references the StackPanel through its instance reference buttonContainer as set by Name.

<StackPanel Name="buttonContainer">
  <Button Click="RemoveThis">Click to remove this button</Button>
</StackPanel>
void RemoveThis(object sender, RoutedEventArgs e)
{
    FrameworkElement fe = e.Source as FrameworkElement;
    if (buttonContainer.Children.Contains(fe))
    {
        buttonContainer.Children.Remove(fe);
    }
}
 Private Sub RemoveThis(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
     Dim fe As FrameworkElement = e.Source
     If (buttonContainer.Children.Contains(fe)) Then
         buttonContainer.Children.Remove(fe)
     End If
End Sub

変数と同様は予測可能な特定のスコープ内で一意名を適用できるようにインスタンスの XAML 名は、スコープの概念によって管理されます。Just like a variable, the XAML name for an instance is governed by a concept of scope, so that names can be enforced to be unique within a certain scope that is predictable. ページを定義するマークアップをプライマリ XAML 名前スコープの境界がそのページのルート要素に一意の 1 つの XAML スコープを表します。The primary markup that defines a page denotes one unique XAML namescope, with the XAML namescope boundary being the root element of that page. ただし、マークアップの他のソースがスタイルまたはテンプレート、スタイル内など、実行時にページと対話できます、このようなマークアップ ソース多くの場合とは限りませんが、ページの XAML 名前スコープ接続しないを独自の XAML 名前スコープ。However, other markup sources can interact with a page at run time, such as styles or templates within styles, and such markup sources often have their own XAML namescopes that do not necessarily connect with the XAML namescope of the page. 詳細についてはx:NameXAML 名前スコープを参照してくださいとNameX:name ディレクティブ、またはWPF XAML 名前スコープします。For more information on x:Name and XAML namescopes, see Name, x:Name Directive, or WPF XAML Namescopes.

添付プロパティおよび添付イベントAttached properties and attached events

XAML では、特定のプロパティまたはイベントに設定されている要素の型の定義で、プロパティまたはイベントが存在するかどうかに関係なく、任意の要素で指定できるようにする言語機能を指定します。XAML specifies a language feature that enables certain properties or events to be specified on any element, regardless of whether the property or event exists in the type's definitions for the element it is being set on. この機能のプロパティのバージョンには、添付プロパティを呼び出すと、イベントのバージョンには、添付イベントが呼び出されます。The properties version of this feature is called an attached property, the events version is called an attached event. 概念的には、添付プロパティおよび添付イベントの任意の XAML 要素/オブジェクトのインスタンスで設定できるグローバルのメンバーとして考えることができます。Conceptually, you can think of attached properties and attached events as global members that can be set on any XAML element/object instance. ただし、その要素/クラスや大規模なインフラストラクチャは、接続されている値のバッキング プロパティ ストアをサポートする必要があります。However, that element/class or a larger infrastructure must support a backing property store for the attached values.

XAML の添付プロパティは通常、属性構文で使用されます。Attached properties in XAML are typically used through attribute syntax. 形式で添付プロパティを指定する属性の構文でownerType.propertyNameします。In attribute syntax, you specify an attached property in the form ownerType.propertyName.

プロパティ要素の使用方法に似ています、一見すると、ここで、 ownerTypeは常に別の種類のオブジェクトの要素よりも、添付プロパティが設定されているを指定します。Superficially, this resembles a property element usage, but in this case the ownerType you specify is always a different type than the object element where the attached property is being set. ownerTypeを取得または添付プロパティの値を設定するには、XAML プロセッサによって必要なアクセサー メソッドを提供する型です。ownerType is the type that provides the accessor methods that are required by a XAML processor in order to get or set the attached property value.

添付プロパティの最も一般的なシナリオでは、それぞれの親要素にプロパティ値を報告する子要素を有効にします。The most common scenario for attached properties is to enable child elements to report a property value to their parent element.

次の例を示しています、DockPanel.Dock添付プロパティ。The following example illustrates the DockPanel.Dock attached property. DockPanelクラスのアクセサーを定義するDockPanel.Dock添付プロパティを所有しています。The DockPanel class defines the accessors for DockPanel.Dock and therefore owns the attached property. DockPanelクラスは、その子要素を反復処理し、主に各要素の値の設定を確認するロジックも含まれています。DockPanel.Dockします。The DockPanel class also includes logic that iterates its child elements and specifically checks each element for a set value of DockPanel.Dock. 値が見つかった場合、その値が子要素を配置するレイアウト時に使用されます。If a value is found, that value is used during layout to position the child elements. 使用、DockPanel.Dock添付プロパティと、この配置機能のスタブに適したシナリオでは実際には、DockPanelクラス。Use of the DockPanel.Dock attached property and this positioning capability is in fact the motivating scenario for the DockPanel class.

<DockPanel>
  <Button DockPanel.Dock="Left" Width="100" Height="20">I am on the left</Button>
  <Button DockPanel.Dock="Right" Width="100" Height="20">I am on the right</Button>
</DockPanel>

WPFWPF、ほとんどまたはすべての添付プロパティは依存関係プロパティとしても実装されます。In WPFWPF, most or all the attached properties are also implemented as dependency properties. 詳細については、「添付プロパティの概要」を参照してください。For details, see Attached Properties Overview.

添付イベントを使用して、類似したownerType.eventName属性構文の形式。Attached events use a similar ownerType.eventName form of attribute syntax. 、非添付イベントと同じようには、XAML の添付イベントの属性の値は、要素のイベントが処理されるときに呼び出されるハンドラー メソッドの名前を指定します。Just like the non-attached events, the attribute value for an attached event in XAML specifies the name of the handler method that is invoked when the event is handled on the element. WPF XAML の添付イベントの使用法は、まれです。Attached event usages in WPF XAML are less common. 詳細については、次を参照してください。添付イベントの概要します。For more information, see Attached Events Overview.

基本型、および XAMLBase types and XAML

基になる WPF XAML と XAML 名前空間に対応する型のコレクションであるCLRCLRに加えて XAML のマークアップ要素オブジェクト。Underlying WPF XAML and its XAML namespace is a collection of types that correspond to CLRCLR objects in addition to markup elements for XAML. ただし、すべてのクラスは、要素にマップすることができます。However, not all classes can be mapped to elements. など、クラスを抽象化ButtonBase、における継承の特定の非抽象基本クラスを使用して、CLRCLRオブジェクト モデルです。Abstract classes, such as ButtonBase, and certain nonabstract base classes are used for inheritance in the CLRCLR objects model. 抽象ものも含めて、基底クラスは、その階層内のいくつかの基本クラスからメンバーを継承、具体的な XAML 要素ごとのため、XAML 開発することも重要です。Base classes, including abstract ones, are still important to XAML development because each of the concrete XAML elements inherits members from some base class in its hierarchy. 多くの場合、これらのメンバーには要素の属性として設定できるプロパティまたは処理できるイベントが含まれます。Often these members include properties that can be set as attributes on the element, or events that can be handled. FrameworkElement 具体的なベースであるUIUIクラスのWPFWPFWPF フレームワーク レベル。FrameworkElement is the concrete base UIUI class of WPFWPF at the WPF framework level. 設計時にUIUI、さまざまな図形、パネル、デコレーターを使用するか、すべてのコントロール クラスから派生FrameworkElementします。When designing UIUI, you will use various shape, panel, decorator, or control classes, which all derive from FrameworkElement. 関連する基本クラスでは、 FrameworkContentElement、フロー レイアウトのプレゼンテーションのためも動作するドキュメント指向の要素のサポートを使用してAPIAPIsを意図的にミラー化、APIAPIsFrameworkElementします。A related base class, FrameworkContentElement, supports document-oriented elements that work well for a flow layout presentation, using APIAPIs that deliberately mirror the APIAPIs in FrameworkElement. 要素レベルで属性の組み合わせとCLRCLRは特定の XAML 要素とその基になる型に関係なく、ほとんどの具体的な XAML 要素で設定可能な共通のプロパティのセットを使用するオブジェクト モデルを提供します。The combination of attributes at the element level and a CLRCLR object model provides you with a set of common properties that are settable on most concrete XAML elements, regardless of the specific XAML element and its underlying type.

XAML セキュリティXAML security

XAML は、オブジェクトのインスタンス化と実行を直接表すマークアップ言語です。XAML is a markup language that directly represents object instantiation and execution. そのため、対応する生成 (ネットワーク アクセス、ファイル システムの IO など) のシステム リソースと対話するのと同じ機能のある要素の XAML で作成したコードは。Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPF サポート、.NET Framework 4.NET Framework 4セキュリティ フレームワークコード アクセス セキュリティ (CAS)Code Access Security (CAS)します。 supports the .NET Framework 4.NET Framework 4 security framework コード アクセス セキュリティ (CAS)Code Access Security (CAS). つまり、WPFWPFインターネット ゾーンで実行されているコンテンツが実行のアクセス許可を削減します。This means that WPFWPF content running in the internet zone has reduced execution permissions. "Loose XAML"(コンパイルされない XAML ページ XAML ビューアーでの読み込み時に解釈) とXAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP)このインターネット ゾーンでは、通常実行して、同じアクセス許可セットを使用します。"Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. ただしに完全に信頼されたアプリケーションに読み込まれた XAML では、ホスト アプリケーションのようにシステム リソースに同じアクセス権があります。However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. 詳細については、次を参照してください。 WPF 部分信頼セキュリティします。For more information, see WPF Partial Trust Security.

コードから XAML の読み込みLoading XAML from code

すべての UI を定義する XAML を使用できますはも XAML で UI の一部だけを定義する適切な場合があります。XAML can be used to define all of the UI, but it is sometimes also appropriate to define just a piece of the UI in XAML. この機能は、ビジネス オブジェクト、またはさまざまなシナリオを提供する XAML を使用して、情報のローカル記憶域、部分的なカスタマイズを有効にされる可能性があります。This capability could be used to enable partial customization, local storage of information, using XAML to provide a business object, or a variety of possible scenarios. これらのシナリオにキーが、XamlReaderクラスとそのLoadメソッド。The key to these scenarios is the XamlReader class and its Load method. 入力は、XAML ファイルであり、出力は、そのマークアップから作成されたオブジェクトの実行時のツリーのすべてを表すオブジェクト。The input is a XAML file, and the output is an object that represents all of the run-time tree of objects that was created from that markup. アプリケーションに既に存在する別のオブジェクトのプロパティであるオブジェクトを挿入できます。You then can insert the object to be a property of another object that already exists in the application. プロパティは、実行エンジンを通知するが、新しいコンテンツが、アプリケーションに追加されたこと、最終的な表示機能を持つコンテンツ モデルで適切なプロパティが、実行中のアプリケーションのコンテンツを非常に簡単に変更できます。によって XAML の読み込み。So long as the property is an appropriate property in the content model that has eventual display capabilities and that will notify the execution engine that new content has been added into the application, you can modify a running application's contents very easily by loading in XAML. この機能が一般にのみ、完全に信頼されたアプリケーションで使用可能な実行中のアプリケーションにファイルの読み込みの明らかなセキュリティへの影響のために注意してください。Note that this capability is generally only available in full-trust applications, because of the obvious security implications of loading files into applications as they run.

次の内容What's next

このトピックでは、WPF に適用される XAML 構文の概念と用語の概要を提供します。This topic provides a basic introduction to XAML syntax concepts and terminology as it applies to WPF. ここで使用される用語の詳細については、次を参照してください。 XAML 構文の詳細します。For more information about the terms used here, see XAML Syntax In Detail.

この手順をまだ行っていないことは場合、チュートリアルのトピックで行う演習を試すチュートリアル: 初めての WPF デスクトップ アプリケーションします。If you have not already done this, try the exercises in the tutorial topic Walkthrough: My first WPF desktop application. このチュートリアルで説明されているマークアップを中心としたアプリケーションを作成するときにこのトピックで説明した概念の多くが深まります。When you create the markup-centric application described by the tutorial, the exercise will help reinforce many of the concepts described in this topic.

WPFWPF 基づく特定のアプリケーション モデルを使用して、Applicationクラス。 uses a particular application model that is based on the Application class. 詳細については、次を参照してください。アプリケーション管理の概要します。For details, see Application Management Overview.

WPF アプリケーションのビルドとコマンド ラインから XAML の包括的なアプリケーションを構築する方法の詳細については、Microsoft Visual StudioMicrosoft Visual Studioします。Building a WPF Application gives you more details about how to build XAML inclusive applications from the command line and with Microsoft Visual StudioMicrosoft Visual Studio.

依存関係プロパティの概要でプロパティの用途の詳細については、 WPFWPF、および依存関係プロパティの概念が導入されました。Dependency Properties Overview gives more information about the versatility of properties in WPFWPF, and introduces the concept of dependency properties.

関連項目See also

XAML 構文の詳細XAML Syntax In Detail
WPF における XAML とカスタム クラスXAML and Custom Classes for WPF
XAML 名前空間 (x:) 言語機能XAML Namespace (x:) Language Features
WPF XAML 拡張機能WPF XAML Extensions
基本要素の概要Base Elements Overview
WPF のツリーTrees in WPF