x:FieldModifier ディレクティブ
指定されているオブジェクト参照のフィールドが、既定動作の TypeAttributes.NotPublic ではなく TypeAttributes.Public アクセスで定義されるように、XAML のコンパイル動作を変更します。
XAML 属性の使用方法
<object x:FieldModifier="Public".../>
XAML 値
Public |
TypeAttributes.Public か TypeAttributes.NotPublic かを指定するために渡す正確な文字列は、分離コードで使用されているプログラミング言語によって異なります。 「解説」を参照してください。 |
依存関係
XAML 稼動環境が任意の場所で x:FieldModifier を使用する場合、XAML 稼動環境のルート要素は x:Class ディレクティブ を宣言する必要があります。
解説
x:FieldModifier は、クラスまたはそのメンバーの一般的なアクセス レベルの宣言には関連しません。 XAML 稼動環境の一部である特定の XAML オブジェクトが処理されるときの XAML 処理動作にだけ関係し、アプリケーションのオブジェクト グラフ内で潜在的にアクセスできるオブジェクトとなります。 既定では、このようなオブジェクトのフィールド参照は非公開なので、コントロール コンシューマーはオブジェクト グラフを直接変更できません。 代わりに、コントロール コンシューマーは、レイアウト ルートの取得、子要素のコレクションの取得、専用のパブリック プロパティの取得などのプログラミング モデルによって有効になる標準パターンを使用してオブジェクト グラフを変更します。
x:FieldModifier 属性の値はプログラミング言語ごとに異なり、その目的は特定のフレームワークで変わることがあります。 使用する文字列は、各言語の CodeDomProvider の実装方法、その言語が TypeAttributes.Public と TypeAttributes.NotPublic の意味を定義するために返す型コンバーター、およびその言語が大文字と小文字を区別するかどうかによって決まります。
C# の場合、TypeAttributes.Public を指定するために渡す文字列は public です。
Microsoft Visual Basic .NET の場合、TypeAttributes.Public を指定するために渡す文字列は Public です。
C++/CLI の場合、XAML のターゲットは現在存在しないため、渡す文字列は定義されていません。
TypeAttributes.NotPublic (C# では internal、Visual Basic では Friend) を指定することもできますが、動作としては NotPublic が既定となっているため TypeAttributes.NotPublic を指定するのは一般的ではありません。
TypeAttributes.NotPublic が既定の動作になっているのは、XAML をコンパイルしたアセンブリの外部のコードから XAML で作成された要素にアクセスする必要があまりないためです。 パブリック アクセスを許可するようにユーザーが明確に x:FieldModifier を設定しない限り、WPF のセキュリティ アーキテクチャと XAML のコンパイル動作の組み合わせが、要素のインスタンスを格納するフィールドを Public にすることはありません。
x:FieldModifier は、x:Name ディレクティブが指定されている要素に対してのみ関係します。これは、フィールドが Public になると、その名前を使用してフィールドを参照するためです。
ルート要素の部分クラスは既定で Public になっていますが、x:ClassModifier ディレクティブを使用して NonPublic にすることができます。 x:ClassModifier ディレクティブは、ルート要素クラスのインスタンスのアクセス レベルにも影響を与えます。 ルート要素には x:Name と x:FieldModifier の両方を配置できますが、これはルート要素のパブリック フィールドのコピーを作成するだけであり、実際のルート要素クラスのアクセス レベルは引き続き x:ClassModifier ディレクティブによって制御されます。