x:サブクラス ディレクティブ
x:Class
も指定されている場合に XAML マークアップのコンパイル動作を変更します。
x:Class
に基づく部分クラスを作成する代わりに、指定された x:Class
が中間クラスとして作成され、指定された派生クラスは x:Class
に基づいていると想定されます。
XAML 属性の使用法
<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
...
</object>
XAML 値
価値 | 形容 |
---|---|
namespace |
随意。
classname を含む CLR 名前空間を指定します。
namespace を指定すると、ドット (.) は namespace と classname を区切ります。 |
classname |
必須。 読み込まれた XAML とその XAML の分離コードを接続する部分クラスの CLR 名を指定します。 「解説」を参照してください。 |
subclassNamespace |
随意。 各名前空間が他方を解決できる場合は、namespace とは異なる場合があります。
subclassName を含む CLR 名前空間を指定します。
subclassName を指定すると、ドット (.) は subclassNamespace と subclassName を区切ります。 |
subclassName |
必須。 サブクラスの CLR 名を指定します。 |
依存 関係
x:Class ディレクティブ も同じオブジェクトで指定する必要があり、そのオブジェクトは XAML 運用環境のルート要素である必要があります。
備考
x:Subclass
使用は、主に部分クラス宣言をサポートしていない言語を対象としています。
x:Subclass
として使用されるクラスは入れ子になったクラスにすることはできません。また、「依存関係」セクションで説明されているように、x:Subclass
はルート オブジェクトを参照する必要があります。
それ以外の場合、x:Subclass
の概念的な意味は、.NET XAML サービスの実装によって未定義になります。 これは、.NET XAML サービスの動作では、XAML マークアップとバッキング コードが接続される全体的なプログラミング モデルが指定されていないためです。
x:Class
と x:Subclass
に関連するその他の概念の実装は、プログラミング モデルまたはアプリケーション モデルを使用して XAML マークアップ、コンパイル済みマークアップ、CLR ベースの分離コードを接続する方法を定義する特定のフレームワークによって実行されます。 各フレームワークには、動作の一部を有効にする独自のビルド アクションや、ビルド環境に含まれている必要がある特定のコンポーネントがある場合があります。 フレームワーク内では、ビルド アクションは、分離コードに使用される特定の CLR 言語によっても異なる場合があります。
WPF の使用に関する注意事項
x:Subclass
は、既に x:Class
されているアプリケーション定義のページ ルートまたは Application ルート上に置くことができます。 ページまたはアプリケーション ルート以外の要素で x:Subclass
を宣言するか、x:Class
が存在しない場所で指定すると、コンパイル時エラーが発生します。
x:Subclass
シナリオで正しく機能する派生クラスの作成はかなり複雑です。 中間ファイル (.xaml ファイル名を組み込んだ名前を含むマークアップ コンパイルによってプロジェクトの obj フォルダーに生成された .g ファイル) を調べる必要がある場合があります。 これらの中間ファイルは、コンパイル済みアプリケーションで結合された部分クラス内の特定のプログラミングコンストラクトの起源を特定するのに役立ちます。
コンパイル時に中間クラスで作成されたハンドラーのスタブをオーバーライドするには、派生クラスのイベント ハンドラーを internal override
(Microsoft Visual Basic でFriend Overrides
) する必要があります。 それ以外の場合、派生クラスの実装では中間クラスの実装が非表示 (シャドウ) され、中間クラス ハンドラーは呼び出されません。
x:Class
と x:Subclass
の両方を定義する場合、x:Class
によって参照されるクラスの実装を指定する必要はありません。
x:Class
属性を使用して名前を付ける必要があるのは、コンパイラが中間ファイルに作成するクラスのガイダンスを持つだけです (この場合、コンパイラは既定の名前を選択しません)。
x:Class
クラスに実装を与えることができます。ただし、これは x:Class
と x:Subclass
の両方を使用する一般的なシナリオではありません。
関連項目
- x:Class ディレクティブ
- WPF の XAML クラスとカスタム クラスを
する
.NET Desktop feedback