x:ClassModifier ディレクティブx:ClassModifier Directive

x:Class が指定されている場合に XAML のコンパイル動作を変更します。Modifies XAML compilation behavior when x:Class is also provided. 具体的には、Public アクセスレベル (既定値) を持つ部分 class を作成するのではなく、指定された x:ClassNotPublic アクセスレベルで作成されます。Specifically, instead of creating a partial class that has a Public access level (the default), the provided x:Class is created with a NotPublic access level. この動作は、生成されたアセンブリのクラスのアクセスレベルに影響します。This behavior affects the access level for the class in the generated assemblies.

XAML 属性の使用XAML Attribute Usage

<object x:Class="namespace.classname" x:ClassModifier="NotPublic">  

XAML の値XAML Values

NotPublicNotPublic TypeAttributes.PublicTypeAttributes.NotPublic を指定するために渡す文字列は、使用する分離コードプログラミング言語によって異なります。The exact string to pass to specify TypeAttributes.Public versus TypeAttributes.NotPublic varies, depending on the code-behind programming language that you use. 「解説」を参照してください。See Remarks.


x:Classも同じ要素に指定する必要があり、その要素はページのルート要素である必要があります。x:Class must also be provided on the same element, and that element must be the root element in a page. 詳細については、「 []」セクションを参照してください。For more information, see [MS-XAML] Section


XAML サービスの使用 .NET Framework の x:ClassModifier の値は、プログラミング言語によって異なります。The value of x:ClassModifier in .NET Framework XAML Services usage varies by programming language. 使用する文字列は、各言語が CodeDomProvider を実装する方法、および TypeAttributes.PublicTypeAttributes.NotPublicの意味を定義するために返す型コンバーターと、その言語で大文字と小文字を区別するかどうかによって異なります。The string to use depends on how each language implements its CodeDomProvider and the type converters it returns to define the meanings for TypeAttributes.Public and TypeAttributes.NotPublic, and whether that language is case sensitive.

  • のC#場合、TypeAttributes.NotPublic を指定するために渡す文字列は internalです。For C#, the string to pass to designate TypeAttributes.NotPublic is internal.

  • Microsoft Visual Basic .NET の場合、TypeAttributes.NotPublic を指定するために渡す文字列は Friendです。For Microsoft Visual Basic .NET, the string to pass to designate TypeAttributes.NotPublic is Friend.

  • /Cli C++では、XAML のコンパイルをサポートするターゲットは存在しません。したがって、渡す値は指定されていません。For C++/CLI, no targets exist that support compiling XAML; therefore, the value to pass is unspecified.

TypeAttributes.Public を指定することもできますC#(public では、Public Visual Basic)。ただし、TypeAttributes.Public は既に既定の動作であるため、TypeAttributes.Public の指定はほとんど行われません。You can also specify TypeAttributes.Public (public in C#, Public in Visual Basic); however, specifying TypeAttributes.Public is infrequently done because TypeAttributes.Public is already the default behavior.

入れ子になったクラス参照は XAML でサポートされていないC#ため、TypeAttributes.NotPublic 修飾子は同じ効果を持つため、ユーザーコードのアクセスレベル制限が同等の他の値 (private など) は x:ClassModifier には関係ありません。Other values with equivalent user code access-level restrictions, such as private in C#, are not relevant for x:ClassModifier because nested class references are not supported in XAML, and therefore, the TypeAttributes.NotPublic modifier has the same effect.

セキュリティに関するメモSecurity Notes

x:ClassModifier で宣言したアクセスレベルは、特定のフレームワークとその機能によって解釈されることもあります。The access level as declared in x:ClassModifier is still subject to interpretation by particular frameworks and their capabilities. WPF には、x:ClassModifierinternalされている型を読み込んでインスタンス化する機能が含まれています。これは、そのクラスが、パッケージ URI 参照を通じて WPF リソースから参照されている場合です。WPF includes capabilities to load and instantiate types where x:ClassModifier is internal, if that class is referenced from a WPF resource through a pack URI reference. このケースの結果として、他のフレームワークによって実装されている可能性がある他の場合は、x:ClassModifier に排他的に依存して、可能性のあるすべてのインスタンス化試行をブロックすることは避けてください。As a consequence of this case and potentially others like it implemented by other frameworks, do not rely exclusively on x:ClassModifier to block all possible instantiation attempts.

参照See also