7

私の WPF ユーザー コントロールのパブリック インターフェイスには、自動生成された InitializeComponent メソッド (部分クラスに含まれています) が含まれています。このような内部的なものはプライベートであると思っていたので、私にとっては驚きでした.

ユーザー コントロールのパブリック インターフェイスから InitializeComponent を削除する方法はありますか?

4

2 に答える 2

6

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.csWPFProjectpublicprivate

(プロジェクトで.g.csファイルを開いたままにしてください。そうしないと、ビルドプロセスがこのファイルを上書きし、エラーを確認できなくなります)

これで、WPFプロジェクトをコンパイルすると、次のようなコンパイルエラーがスローされます。

エラー22「WPFProject.Window1」はインターフェイスメンバー「System.Windows.Markup.IComponentConnector.InitializeComponent()」を実装していません。'WPFProject.Window1.InitializeComponent()'はパブリックではないため、インターフェイスメンバーを実装できません。

さらに、InitializeComponent()[System.Diagnostics.DebuggerNonUserCodeAttribute()]属性でマークされているため、デバッグ中にこのメソッドにステップインすることはできません。

別のSOQAディスカッションがあり、これはより詳細に説明するのに役立ちます

于 2012-05-10T11:02:49.017 に答える
0

あなたがあなたのコントロールをしたならば、あなたは気分が良くなります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">
于 2012-05-10T09:18:12.767 に答える