x:FieldModifier ディレクティブ

名前付きオブジェクト参照のフィールドが TypeAttributes.NotPublic の既定の動作ではなく TypeAttributes.Public アクセスで定義されるように、XAML コンパイル動作を変更します。

XAML 属性の使用方法

<object x:FieldModifier="Public".../>

XAML 値

Public TypeAttributes.PublicTypeAttributes.NotPublic を指定するために渡す文字列は一定ではなく、使用される分離コード プログラミング言語に依存します。 「解説」を参照してください。

依存関係

XAML の運用環境で x:FieldModifier を任意の場所で使用する場合は、その XAML の運用環境のルート要素で x:Class ディレクティブを宣言する必要があります。

Remarks

x:FieldModifier は、クラスまたはそのメンバーの一般アクセス レベルの宣言には関係ありません。 XAML の運用環境に含まれる特定の XAML オブジェクトが処理され、アプリケーションのオブジェクト グラフでアクセスできる可能性があるオブジェクトになる場合にのみ、XAML 処理の動作に関連します。 既定では、このようなオブジェクトのフィールド参照はプライベートに保持されるため、コントロールのコンシューマーがオブジェクト グラフを直接変更することはできません。 代わりに、コントロール コンシューマーは、レイアウト ルート、子要素コレクション、専用のパブリック プロパティなどを取得することによって、プログラミング モデルによって有効になる標準パターンを使用して、オブジェクト グラフを変更する必要があります。

x:FieldModifier 属性の値はプログラミング言語によって異なり、その目的は特定のフレームワークによって異なります。 使用する文字列は、各言語で CodeDomProvider を実装する方法、TypeAttributes.PublicTypeAttributes.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 を指定することは普通はありません。

XAML をコンパイルしたアセンブリの外部のコードによる XAML で作成された要素へのアクセスはめったに起こらないため、TypeAttributes.NotPublic は、既定の動作です。 WPF のセキュリティ アーキテクチャと XAML のコンパイル動作の組み合わせでは、パブリック アクセスを許可するように x:FieldModifier を明示的に設定しない限り、要素インスタンスを格納するフィールドはパブリックとして宣言されません。

x:FieldModifier は、x:Name ディレクティブがある要素にのみ関連します。これは、その名前を使用して、パブリック後のフィールドを参照するためです。

既定では、ルート要素の部分クラスはパブリックです。ただし、x:ClassModifier ディレクティブを使用して非パブリックにすることができます。 x:ClassModifier ディレクティブは、ルート要素クラスのインスタンスのアクセス レベルにも影響します。 ルート要素に x:Namex:FieldModifier の両方を含めることができますが、これによってはルート要素のパブリック フィールドのコピーが作成されるだけであり、ルート要素クラスのアクセス レベルは引き続き x:ClassModifier ディレクティブによって制御されます。

関連項目