x:Subclass ディレクティブx:Subclass Directive

が指定されているx:Class場合に XAML マークアップのコンパイル動作を変更します。Modifies XAML markup compile behavior when x:Class is also provided. x:Class基づく部分クラスを作成する代わりに、指定さx:Classれたが中間クラスとして作成され、指定された派生クラスがにx:Class基づいていると想定されます。Instead of creating a partial class that is based on x:Class, the provided x:Class is created as an intermediate class, and then your provided derived class is expected to be based on x:Class.

XAML 属性の使用方法XAML Attribute Usage

<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">  
   ...  
</object>  

XAML 値XAML Values

namespace 任意。Optional. を含むclassnameCLR 名前空間を指定します。Specifies a CLR namespace that contains classname. namespace指定した場合、ドット (.) namespaceclassnameとを分離します。If namespace is specified, a dot (.) separates namespace and classname.
classname 必須。Required. 読み込まれた XAML とその XAML の分離コードを接続する部分クラスの CLR 名を指定します。Specifies the CLR name of the partial class that connects the loaded XAML and your code-behind for that XAML. 「解説」を参照してください。See Remarks.
subclassNamespace 任意。Optional. は、各名前namespace空間が他の名前空間を解決できるかどうかとは異なる場合があります。Can be different from namespace if each namespace can resolve the other. を含むsubclassNameCLR 名前空間を指定します。Specifies a CLR namespace that contains subclassName. subclassName指定した場合、ドット (.) subclassNamespacesubclassNameとを分離します。If subclassName is specified, a dot (.) separates subclassNamespace and subclassName.
subclassName 必須。Required. サブクラスの CLR 名を指定します。Specifies the CLR name of the subclass.

依存関係Dependencies

X:Class ディレクティブは、同じオブジェクトでも指定する必要があります。また、そのオブジェクトは XAML 運用のルート要素である必要があります。x:Class Directive must also be provided on the same object, and that object must be the root element of the XAML production.

RemarksRemarks

x:Subclass使用法は、主に部分クラス宣言をサポートしない言語を対象としています。x:Subclass usage is primarily intended for languages that do not support partial class declarations.

としてx:Subclass使用されるクラスは、入れ子になっx:Subclassたクラスにすることはできません。また、「依存関係」セクションで説明されているように、ルートオブジェクトを参照する必要があります。The class used as the x:Subclass cannot be a nested class, and x:Subclass must refer to the root object as explained in the "Dependencies" section.

それ以外の場合、のx:Subclass概念上の意味は、.NET Framework XAML サービスの実装によって定義されていません。Otherwise, the conceptual meaning of x:Subclass is undefined by a .NET Framework XAML Services implementation. これは .NET Framework XAML サービスの動作では、XAML マークアップとバッキングコードの接続によって使用されるプログラミングモデル全体が指定されないためです。This is because .NET Framework XAML Services behavior does not specify the overall programming model by which XAML markup and backing code are connected. およびにx:Class関連するそのx:Subclass他の概念の実装は、プログラミングモデルまたはアプリケーションモデルを使用して、XAML マークアップ、コンパイルされたマークアップ、および CLR ベースの分離コードを接続する方法を定義する特定のフレームワークによって実行されます。Implementations of further concepts related to x:Class and x:Subclass are performed by specific frameworks that use programming models or application models to define how to connect XAML markup, compiled markup, and CLR-based code-behind. 各フレームワークには、動作の一部またはビルド環境に含まれる必要がある特定のコンポーネントを有効にする独自のビルドアクションがある場合があります。Each framework might have its own build actions that enable some of the behavior, or specific components that must be included in the build environment. フレームワーク内では、ビルドアクションは、分離コードに使用される特定の CLR 言語によって異なる場合もあります。Within a framework, build actions can also vary based on the specific CLR language that is used for the code-behind.

WPF の使用上の注意WPF Usage Notes

x:Subclassは、がx:Class既に存在するアプリケーション定義Application内のページルートまたはルートに配置できます。x:Subclass can be on a page root or on the Application root in the application definition, which already has x:Class. ページx:Subclassまたはアプリケーションルート以外の要素での宣言、または存在しないx:Class要素の指定により、コンパイル時エラーが発生します。Declaring x:Subclass on any element other than a page or application root, or specifying it where no x:Class exists, causes a compile-time error.

このx:Subclassシナリオに対して正しく動作する派生クラスを作成するのは非常に複雑です。Creating derived classes that work correctly for the x:Subclass scenario is fairly complex. 場合によっては、中間ファイル (マークアップコンパイルによってプロジェクトの obj フォルダーに生成された g ファイル) を調べて、.xaml ファイル名が含まれている名前を使用する必要があります。You might need to examine the intermediate files (the .g files produced in the obj folder of your project by markup compile, with names that incorporate the .xaml file names). これらの中間ファイルを使用すると、コンパイルされたアプリケーションの部分クラスに結合されている特定のプログラミング構成要素の発生元を特定できます。These intermediate files can help you determine the origin of certain programming constructs in the joined partial classes in the compiled application.

コンパイル時に中間クラスで作成さinternal overrideFriend Overridesたハンドラーのスタブをオーバーライドするには、派生クラスのイベントハンドラーが (Microsoft Visual Basic) である必要があります。Event handlers in the derived class must be internal override (Friend Overrides in Microsoft Visual Basic) in order to override the stubs for the handlers as created in the intermediate class during compilation. それ以外の場合は、派生クラスの実装によって中間クラスの実装が非表示になり、中間クラスのハンドラーは呼び出されません。Otherwise, the derived class implementations hide (shadow) the intermediate class implementation and the intermediate class handlers are not invoked.

x:Class x:Classの両方を定義する場合、によって参照されるクラスの実装を指定する必要はありません。 x:SubclassWhen you define both x:Class and x:Subclass, you do not need to provide any implementation for the class that is referenced by x:Class. x:Class属性を使用して名前を指定するだけで、中間ファイルに作成するクラスに関するガイダンスがコンパイラに提供されます (この場合、コンパイラは既定の名前を選択しません)。You only need to give it a name via the x:Class attribute so that the compiler has some guidance for the class that it creates in the intermediate files (the compiler does not select a default name in this case). クラスにx:Classは実装を与えることができますが、これはとx:Subclassの両方x:Classを使用する場合の一般的なシナリオではありません。You can give the x:Class class an implementation; however, this is not the typical scenario for using both x:Class and x:Subclass.

関連項目See also