XAML 名前空間および WPF XAML の名前空間の割り当てXAML Namespaces and Namespace Mapping for WPF XAML

さらに、このトピックでは、存在と WPF XAML ファイルのルート タグにある多くの場合、2 つの XAML 名前空間のマッピングの目的について説明します。This topic further explains the presence and purpose of the two XAML namespace mappings as often found in the root tag of a WPF XAML file. 独自のコード内や個別のアセンブリ内で定義されている要素を使用するためのようなマッピングを生成する方法についても説明します。It also describes how to produce similar mappings for using elements that are defined in your own code, and/or within separate assemblies.

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

XAML 名前空間は、実際には、XML 名前空間の概念の拡張です。A XAML namespace is really an extension of the concept of an XML namespace. XAML 名前空間を指定するための手法を使用して、XML 名前空間の構文、Uri を使用して、同じのマークアップのソースから複数の名前空間を参照する手段を提供するプレフィックスを使用して、名前空間の識別子としての規約に依存して、。The techniques of specifying a XAML namespace rely on the XML namespace syntax, the convention of using URIs as namespace identifiers, using prefixes to provide a means to reference multiple namespaces from the same markup source, and so on. XML 名前空間の XAML 定義に追加される主要な概念は XAML 名前空間が両方の一意性のスコープ マークアップの使用を意味し、マークアップのエンティティが可能性のある特定の CLR 名前空間によってバックアップされ参照方法にも影響アセンブリ。The primary concept that is added to the XAML definition of the XML namespace is that a XAML namespace implies both a scope of uniqueness for the markup usages, and also influences how markup entities are potentially backed by specific CLR namespaces and referenced assemblies. 後者の考慮事項は、XAML スキーマ コンテキストの概念の影響も受けます。This latter consideration is also influenced by the concept of a XAML schema context. XAML 名前空間での WPF の連携のため、こともできる一般に既定の XAML 名前空間、言語の XAML 名前空間、および、さらに XAML 名前空間として特定のバッキング CLR に直接、XAML マークアップでマップされている面での XAML 名前空間の名前空間と参照先アセンブリ。But for purposes of how WPF works with XAML namespaces, you can generally think of XAML namespaces in terms of a default XAML namespace, the XAML language namespace, and any further XAML namespaces as mapped by your XAML markup directly to specific backing CLR namespaces and referenced assemblies.

WPF および XAML Namespace 宣言The WPF and XAML Namespace Declarations

多くの XAML ファイルのルート タグである名前空間宣言内では、2 つの XML 名前空間宣言が通常表示されます。Within the namespace declarations in the root tag of many XAML files, you will see that there are typically two XML namespace declarations. 最初の宣言では、マップ全体の WPF クライアント/既定値としてフレームワークの XAML 名前空間。The first declaration maps the overall WPF client / framework XAML namespace as the default:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

2 番目の宣言 (通常) にマップすること、別の XAML 名前空間をマップする、x:プレフィックス。The second declaration maps a separate XAML namespace, mapping it (typically) to the x: prefix.

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

これらの宣言の間のリレーションシップは、x:プレフィックスのマッピングは、XAML 言語の定義の一部である組み込みをサポートしているとWPFWPF言語としての XAML を使用しのボキャブラリを定義する 1 つの実装は、そのXAML のオブジェクト。The relationship between these declarations is that the x: prefix mapping supports the intrinsics that are part of the XAML language definition, and WPFWPF is one implementation that uses XAML as a language and defines a vocabulary of its objects for XAML. あるため、WPF ボキャブラリの使用法が XAML の組み込みの使用方法よりもはるかに一般的、WPF ボキャブラリは、既定値としてマップされます。Because the WPF vocabulary's usages will be far more common than the XAML intrinsics usages, the WPF vocabulary is mapped as the default.

x:プレフィックス規約のプロジェクト テンプレートの後に、XAML 言語の組み込みサポートをマッピングするサンプル コード、および言語のドキュメントの機能SDKSDKします。The x: prefix convention for mapping the XAML language intrinsics support is followed by project templates, sample code, and the documentation of language features within this SDKSDK. XAML 名前空間では、基本的な WPF アプリケーションにも必要なは一般的に使用される多くの機能を定義します。The XAML namespace defines many commonly-used features that are necessary even for basic WPF applications. たとえば、分離コードを部分クラスを使用して XAML ファイルを結合するのに名前を付けてとそのクラス、x:Class関連する XAML ファイルのルート要素の属性です。For instance, in order to join any code-behind to a XAML file through a partial class, you must name that class as the x:Class attribute in the root element of the relevant XAML file. または、キー付きのリソースには、アクセスする XAML ページで定義されているいずれかの要素、x:Key属性が「対象の要素に設定します。Or, any element as defined in a XAML page that you wish to access as a keyed resource should have the x:Key attribute set on the element in question. これらおよびその他の XAML の詳細については「 XAML の概要 (WPF)またはXAML 構文の詳細です。For more information on these and other aspects of XAML see XAML Overview (WPF) or XAML Syntax In Detail.

カスタム クラスやアセンブリへのマッピングMapping to Custom Classes and Assemblies

XML 名前空間をマップするには、一連の内のトークンを使用してアセンブリをxmlnsプレフィックス宣言、プレフィックスを標準的な WPF と XAML 組み込み XAML 名前空間をマップする方法に似ています。You can map XML namespaces to assemblies using a series of tokens within an xmlns prefix declaration, similar to how the standard WPF and XAML-intrinsics XAML namespaces are mapped to prefixes.

構文には、次の名前のトークンと次の値。The syntax takes the following possible named tokens and following values:

clr-namespace: CLR 名前空間は要素として公開するパブリック型を格納するアセンブリ内で宣言されています。clr-namespace: The CLR namespace declared within the assembly that contains the public types to expose as elements.

assembly= 参照先の一部またはすべてを含むアセンブリCLRCLR名前空間。assembly= The assembly that contains some or all of the referenced CLRCLR namespace. この値は、パスではなく、アセンブリの名前だけでは通常、(.dll または .exe) など、拡張機能は含まれません。This value is typically just the name of the assembly, not the path, and does not include the extension (such as .dll or .exe). マップしようとして XAML を含むプロジェクト ファイル内のプロジェクト参照としては、そのアセンブリへのパスを確立する必要があります。The path to that assembly must be established as a project reference in the project file that contains the XAML you are trying to map. バージョン管理とを厳密な名前の署名を反映するために、assembly値で定義されている文字列であることができますAssemblyName、単純な文字列名ではなくです。In order to incorporate versioning and strong-name signing, the assembly value can be a string as defined by AssemblyName, rather than the simple string name.

文字を分離することに注意してください、clr-namespace値からトークンがありますが、コロン (:) 文字の分離、assembly値からトークンが等号 (=)。Note that the character separating the clr-namespace token from its value is a colon (:) whereas the character separating the assembly token from its value is an equals sign (=). これら 2 つのトークンの間で使用する文字は、セミコロンです。The character to use between these two tokens is a semicolon. またの空白任意の場所に含めない宣言します。Also, do not include any whitespace anywhere in the declaration.

基本的なカスタム マッピング例A Basic Custom Mapping Example

次のコードでは、サンプルのカスタム クラスを定義します。The following code defines an example custom class:

namespace SDKSample {  
    public class ExampleClass : ContentControl {  
        public ExampleClass() {  
        ...  
        }  
    }  
}  
Namespace SDKSample  
    Public Class ExampleClass  
        Inherits ContentControl  
         ...  
        Public Sub New()  
        End Sub  
    End Class  
End Namespace  

その後、このカスタム クラスは、プロジェクトの設定 (非表示) と呼ばれる、ライブラリにコンパイルSDKSampleLibraryです。This custom class is then compiled into a library, which per the project settings (not shown) is named SDKSampleLibrary.

このカスタム クラスを参照するようにする必要がありますは、現在のプロジェクトへの参照として含める Visual Studio のソリューション エクスプ ローラーの UI を使用します。In order to reference this custom class, you also need to include it as a reference for your current project, which you would typically do using the Solution Explorer UI in Visual Studio.

これで、クラス、およびプロジェクトの設定への参照を含むライブラリがある場合は、XAML のルート要素の一部として次のプレフィックスのマッピングを追加できます。Now that you have a library containing a class, and a reference to it in project settings, you can add the following prefix mapping as part of your root element in XAML:

xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

すべて同時に言うと、ルート タグに、一般的な既定値と共にカスタム マッピングおよび x: マッピングが含まれていますし、プレフィックス付きの参照を使用してインスタンス化する XAML を次に示しますExampleClassその UI で。To put it all together, the following is XAML that includes the custom mapping along with the typical default and x: mappings in the root tag, then uses a prefixed reference to instantiate ExampleClass in that UI:

<Page x:Class="WPFApplication1.MainPage"  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary">  
  ...  
  <custom:ExampleClass/>  
...  
</Page>  

現在のアセンブリへのマッピングMapping to Current Assemblies

assembly 場合は省略可能、clr-namespace参照先は、カスタム クラスを参照しているアプリケーション コードと同じアセンブリ内で定義されています。assembly can be omitted if the clr-namespace referenced is being defined within the same assembly as the application code that is referencing the custom classes. この場合の同等の構文を指定するか、 assembly=、なし文字列トークンを等号の後にします。Or, an equivalent syntax for this case is to specify assembly=, with no string token following the equals sign.

カスタム クラスは、同じアセンブリで定義されている場合は、ページのルート要素として使用できません。Custom classes cannot be used as the root element of a page if defined in the same assembly. 部分クラスが割り当てる必要はありません。アプリケーションが必要となる xaml 要素として参照する場合にマップするページの部分クラスではないクラスのみです。Partial classes do not need to be mapped; only classes that are not the partial class of a page in your application need to be mapped if you intend to reference them as elements in XAML.

アセンブリ内の XML 名前空間への CLR 名前空間のマッピングMapping CLR Namespaces to XML Namespaces in an Assembly

WPF では、単一の XAML 名前空間に複数の CLR 名前空間をマップするために、XAML プロセッサによって使用される CLR 属性を定義します。WPF defines a CLR attribute that is consumed by XAML processors in order to map multiple CLR namespaces to a single XAML namespace. この属性は、XmlnsDefinitionAttributeアセンブリを生成するソース コードにアセンブリ レベルで配置されます。This attribute, XmlnsDefinitionAttribute, is placed at the assembly level in the source code that produces the assembly. WPF アセンブリのソース コードでは、この属性を使用して、、さまざまな一般的な名前空間をマップSystem.WindowsSystem.Windows.Controlshttp://schemas.microsoft.com/winfx/2006/xaml/presentationhttp://schemas.microsoft.com/winfx/2006/xaml/presentation名前空間。The WPF assembly source code uses this attribute to map the various common namespaces, such as System.Windows and System.Windows.Controls, to the http://schemas.microsoft.com/winfx/2006/xaml/presentationhttp://schemas.microsoft.com/winfx/2006/xaml/presentation namespace.

XmlnsDefinitionAttribute 2 つのパラメーター: XML と XAML 名前空間の名前と CLR 名前空間の名前。The XmlnsDefinitionAttribute takes two parameters: the XML/XAML namespace name, and the CLR namespace name. 1 つ以上XmlnsDefinitionAttribute同じ XML 名前空間に複数の CLR 名前空間をマップする存在できます。More than one XmlnsDefinitionAttribute can exist to map multiple CLR namespaces to the same XML namespace. マップされると、それらの名前空間のメンバーも参照できます完全修飾せず、適切な提供することによって必要な場合はusing部分クラスの分離コード ページ内のステートメント。Once mapped, members of those namespaces can also be referenced without full qualification if desired by providing the appropriate using statement in the partial-class code-behind page. 詳細については、「XmlnsDefinitionAttribute」を参照してください。For more details, see XmlnsDefinitionAttribute.

デザイナーの名前空間と XAML テンプレートから他のプレフィックスDesigner Namespaces and Other Prefixes From XAML Templates

XAML の WPF の開発環境やデザイン ツールを使用している、する可能性がありますがわかりますがある他の定義済みの XAML 名前空間プレフィックスの XAML マークアップで/です。If you are working with development environments and/or design tools for WPF XAML, you may notice that there are other defined XAML namespaces / prefixes within the XAML markup.

WPF Designer for Visual StudioWPF Designer for Visual Studio 通常、プレフィックスにマップされるデザイナー名前空間を使用してd:です。 uses a designer namespace that is typically mapped to the prefix d:. WPF のプロジェクト テンプレートをより新しい場合があります、XAML との間のやり取りをサポートするためにこの XAML 名前空間をマップして事前WPF Designer for Visual StudioWPF Designer for Visual Studioおよびその他のデザイン環境です。More recent project templates for WPF might pre-map this XAML namespace to support interchange of the XAML between WPF Designer for Visual StudioWPF Designer for Visual Studio and other design environments. この設計の XAML 名前空間は、ラウンドト リップ、デザイナーで XAML ベースの UI の中にデザインの状態を永続化に使用されます。This design XAML namespace is used to perpetuate design state while roundtripping XAML-based UI in the designer. 使用機能のようにd:IsDataSourceデザイナーでデータ ソースのランタイムを有効にします。It is also used for features such as d:IsDataSource, which enable runtime data sources in a designer.

マップされている別のプレフィックスが表示されてmc:です。Another prefix you might see mapped is mc:. mc: マークアップ互換性のためと、必ずしも XAML に固有ではないマークアップ互換性パターンを活用することができます。mc: is for markup compatibility, and is leveraging a markup compatibility pattern that is not necessarily XAML-specific. ある程度はマークアップ互換性フレームワーク間またはその他の境界、補助的な実装の間で XAML を交換する機能を使用することができます XAML スキーマ コンテキスト間で作業デザイナーでは、制限付きのモードの互換性を提供され、します。To some extent, the markup compatibility features can be used to exchange XAML between frameworks or across other boundaries of backing implementation, work between XAML schema contexts, provide compatibility for limited modes in designers, and so on. マークアップ互換性概念と WPF に関連付ける方法の詳細については、次を参照してくださいマークアップの互換性 (mc:)。言語機能します。For more information on markup compatibility concepts and how they relate to WPF, see Markup Compatibility (mc:) Language Features.

WPF およびアセンブリの読み込みWPF and Assembly Loading

WPF の XAML スキーマ コンテキスト 'æ˜aœg' の CLR で定義された概念を順番に使用して、WPF アプリケーション モデル、AppDomainです。The XAML schema context for WPF integrates with the WPF application model, which in turn uses the CLR-defined concept of AppDomain. 次の順序は、XAML スキーマ コンテキストがアセンブリを読み込むかの WPF の使用状況に基づいて実行時またはデザイン時に、型を検出する方法をどのように解釈する方法について説明しますAppDomainおよびその他の要因です。The following sequence describes how XAML schema context interprets how to either load assemblies or find types at run time or design time, based on the WPF use of AppDomain and other factors.

  1. 反復処理する、AppDomain名前のすべての側面に一致する読み込み済みアセンブリを探して、読み込まれたアセンブリを最も最近から開始します。Iterate through the AppDomain, looking for an already-loaded assembly that matches all aspects of the name, starting from the most recently loaded assembly.

  2. 名前修飾する場合は、呼び出すAssembly.Load(String)修飾名にします。If the name is qualified, call Assembly.Load(String) on the qualified name.

  3. 短い名前と修飾名の公開キー トークンは、マークアップから読み込まれたアセンブリに一致すると、そのアセンブリを返します。If the short name + public key token of a qualified name matches the assembly that the markup was loaded from, return that assembly.

  4. 短い名前と公開キー トークンを使用して呼び出すAssembly.Load(String)です。Use the short name + public key token to call Assembly.Load(String).

  5. 名前が修飾されていない場合は、呼び出すAssembly.LoadWithPartialNameです。If the name is unqualified, call Assembly.LoadWithPartialName.

Loose XAML は、手順 3; を使用しません読み込まれたアセンブリが存在しません。Loose XAML does not use Step 3; there is no loaded-from assembly.

WPF (XamlBuildTask を経由して生成される) にコンパイルされた XAML がから既に読み込まれているアセンブリを使用していないAppDomain(ステップ 1)。Compiled XAML for WPF (generated via XamlBuildTask) does not use the already-loaded assemblies from AppDomain (Step 1). また、名前する必要がありますしない XamlBuildTask 出力から修飾されていないため、手順 5 が適用されません。Also, the name should never be unqualified from XamlBuildTask output, so Step 5 does not apply.

BAML も含めることはできませんの非修飾アセンブリ名が、コンパイル済みの BAML (PresentationBuildTask 経由で生成) はすべての手順を使用します。Compiled BAML (generated via PresentationBuildTask) uses all steps, although BAML also should not contain unqualified assembly names.

関連項目See Also

XML 名前空間を理解します。Understanding XML Namespaces
XAML の概要 (WPF)XAML Overview (WPF)