わかりました、ここで何かが足りないと思います。
たとえば、Winforms アプリケーションに Form と UserControl があるとします。次に、ボタンを UserCntrol に追加し、UserControl をフォームに追加します。これで、ボタンがプライベート メンバーとして UserControl に追加され、UserControl がパブリック プロパティを介してプライベート メンバーを公開するまで、フォームはボタンにアクセスできません。
private void Form1_Load(object sender, EventArgs e)
{
this.testUserControl1.
}
フォームのコードから UserControl のボタンを見つけることはできません。カプセル化の観点から、これはまさに私たちが望んでいるものだと思います。
ここで、Window と UserControl を使用して WPF アプリケーションで同じことを行っているとしましょう。Xaml を使用して UserControl に Button を追加し、次に UserControl を Window に追加します。しかし、今ではウィンドウのコードからボタンにアクセスできます。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.testUserControl1.button1.Content = "What the HELL!";
}
Xaml の代わりにコードを使用してボタンを追加した場合でも、非公開にする機会があります。しかし、「コードではなく、宣言的に UI を構築する」 - Xamlが存在するのはそのためではないでしょうか? それでは、カプセル化の概念を壊していませんか?
編集:私を含め、ほとんどの人がMVVMを使用して、コードビハインドからUI要素を参照する必要のないWPFアプリケーションを開発していることを知っています。しかし、質問の文脈はまだ成り立っていますよね?私はしばしば再利用可能な UserContolr (MVVM のようにビューとしてではなく) を構築して、いくつかのビュー全体でそれらをビジュアル要素として使用します。ほとんどの場合、UserControl のコード ビハインドを使用する必要はありません。