私の WPF ユーザー コントロールのパブリック インターフェイスには、自動生成された InitializeComponent メソッド (部分クラスに含まれています) が含まれています。このような内部的なものはプライベートであると思っていたので、私にとっては驚きでした.
ユーザー コントロールのパブリック インターフェイスから InitializeComponent を削除する方法はありますか?
私の WPF ユーザー コントロールのパブリック インターフェイスには、自動生成された InitializeComponent メソッド (部分クラスに含まれています) が含まれています。このような内部的なものはプライベートであると思っていたので、私にとっては驚きでした.
ユーザー コントロールのパブリック インターフェイスから InitializeComponent を削除する方法はありますか?
InitializeComponent
インターフェイスで定義されたメソッドSystem.Windows.Markup.IComponentConnector
であり、コンポーネントのコンパイル済みページをロードするために使用されます。
詳細については、このリンクMSDN
からの以下の抜粋を参照してください。
IComponentConnector
によって内部的に使用されBaml2006Reader
ます。
の実装は、アプリケーションおよびプログラミングモデルと組み合わせInitializeComponent
て使用するフレームワークまたはテクノロジーによって提供されるインフラストラクチャの一部として広く観察できます。XAML
たとえば、WPFページおよびアプリケーションでXAMLルート要素用に生成されたクラスを確認すると、出力にInitializeComponentが定義されていることがわかります。このメソッドは、コンパイルされたアセンブリにも存在し、XAML解析時にXAML UIコンテンツを読み込むWPFアプリケーションモデルで役割を果たします(したがってInitializeComponent
、他の外部のWPF関連アセンブリが作成できるように、インターフェイスに存在し、パブリックである必要があります。それの使用)。
これをさらに説明するには、(say): class of say: projectのInitializeComponent()
メソッドの定義に移動し、アクセスをからに変更します。Window1.g.cs
WPFProject
public
private
(プロジェクトで.g.csファイルを開いたままにしてください。そうしないと、ビルドプロセスがこのファイルを上書きし、エラーを確認できなくなります)
これで、WPFプロジェクトをコンパイルすると、次のようなコンパイルエラーがスローされます。
エラー22「WPFProject.Window1」はインターフェイスメンバー「System.Windows.Markup.IComponentConnector.InitializeComponent()」を実装していません。'WPFProject.Window1.InitializeComponent()'はパブリックではないため、インターフェイスメンバーを実装できません。
さらに、InitializeComponent()
は [System.Diagnostics.DebuggerNonUserCodeAttribute()]
属性でマークされているため、デバッグ中にこのメソッドにステップインすることはできません。
別のSOQAディスカッションがあり、これはより詳細に説明するのに役立ちます
あなたがあなたのコントロールをしたならば、あなたは気分が良くなりますinternal
か?
<UserControl
x:Class="PBbase.Client.Navigation.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:ClassModifier="internal">