2

わかりました、ここで何かが足りないと思います。

たとえば、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 のコード ビハインドを使用する必要はありません。

4

1 に答える 1

3

何を言っているのかよくわかりません。XAML でボタンを作成し、プライベートにすることもできます。

<Button x:FieldModifier="private" x:Name="Whatever" Content="This is a button" />

コードで行う必要はありません。internalではなく(私が思うに)デフォルトになっているだけprivateです。しかし、HB が言ったように、とにかく自分のコントロールに名前を付けることはめったにないので、自分でこれに遭遇したことはありません。

于 2012-08-23T22:00:26.660 に答える