次の方法で共有


x:Subclass 属性

更新 : 2007 年 11 月

x:Class も提供される場合の XAML のコンパイル動作を変更します。具体的には、ページ クラスに基づいて部分クラスを作成する代わりに、提供された 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 属性も同じ要素に提供される必要があり、その要素はページのルート要素である必要があります。

解説

x:Subclass は、主として、部分クラス宣言をサポートしない言語のためのものです。

x:Subclass は、Extensible Application Markup Language (XAML) ページのルートである任意の要素、または既に x:Class を持っているアプリケーション定義の Application ルートに対して宣言できます。x:Subclass を、ページ ルートまたはアプリケーション ルート以外の要素で宣言すると、または x:Class が存在しない場所で指定すると、コンパイル時エラーが発生します。

x:Subclass のシナリオで正しく動作する派生クラスを作成するのは、かなり複雑な作業です。中間ファイル (プロジェクトの obj フォルダに生成される .g ファイルで、名前には .xaml ファイル名が含まれる) の確認が必要になる場合があります。これらの中間ファイルは、コンパイル済みアプリケーション内の結合された部分クラスにおいて、特定のプログラミング構造の起点を特定するのに役立ちます。

x:Subclass として使用するクラスは、入れ子にできません。

コンパイル時に中間クラスで作成されるハンドラのスタブをオーバーライドするには、派生クラス内のイベント ハンドラが internal override (Microsoft Visual Basic .NET では Friend Overrides) でなければなりません。それ以外の場合は、派生クラスの実装が中間クラスの実装を隠し (シャドウ)、中間クラスのハンドラの呼び出しは失敗します。

x:Class と x:Subclass の両方を定義する場合、x:Class によって参照されるクラスの実装を提供する必要はありません。コンパイラが中間ファイルで作成するクラスについてガイダンスを得られるよう、x:Class 属性を使用して名前を指定することだけが必要です (この場合、コンパイラは既定の名前を選択しません)。x:Class クラスに実装を提供してもかまいませんが、これは x:Class と x:Subclass の両方を使用する標準的なシナリオでは行いません。

参照

概念

XAML およびカスタム クラス

参照

x:Class 属性