次の方法で共有


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 を指定すると、ドット (.) は namespaceclassnameを区切ります。
classname 必須。 読み込まれた XAML とその XAML の分離コードを接続する部分クラスの CLR 名を指定します。 「解説」を参照してください。
subclassNamespace 随意。 各名前空間が他方を解決できる場合は、namespace とは異なる場合があります。 subclassNameを含む CLR 名前空間を指定します。 subclassName を指定すると、ドット (.) は subclassNamespacesubclassNameを区切ります。
subclassName 必須。 サブクラスの CLR 名を指定します。

依存 関係

x:Class ディレクティブ も同じオブジェクトで指定する必要があり、そのオブジェクトは XAML 運用環境のルート要素である必要があります。

備考

x:Subclass 使用は、主に部分クラス宣言をサポートしていない言語を対象としています。

x:Subclass として使用されるクラスは入れ子になったクラスにすることはできません。また、「依存関係」セクションで説明されているように、x:Subclass はルート オブジェクトを参照する必要があります。

それ以外の場合、x:Subclass の概念的な意味は、.NET XAML サービスの実装によって未定義になります。 これは、.NET XAML サービスの動作では、XAML マークアップとバッキング コードが接続される全体的なプログラミング モデルが指定されていないためです。 x:Classx: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:Classx:Subclassの両方を定義する場合、x:Classによって参照されるクラスの実装を指定する必要はありません。 x:Class 属性を使用して名前を付ける必要があるのは、コンパイラが中間ファイルに作成するクラスのガイダンスを持つだけです (この場合、コンパイラは既定の名前を選択しません)。 x:Class クラスに実装を与えることができます。ただし、これは x:Classx:Subclassの両方を使用する一般的なシナリオではありません。

関連項目