2

好的,我想我在这里遗漏了一些东西。

可以说,在 Winforms 应用程序中,我有一个 Form 和一个 UserControl。然后我将一个Button 添加到UserCntrol,然后将UserControl 添加到Form。现在 Button 作为私有成员添加到 UserControl 中,并且在 UserControl 通过公共属性公开它的私有成员之前,Form 不应访问 Button。

private void Form1_Load(object sender, EventArgs e)
{
    this.testUserControl1.
}

您不会从 Form 的代码中找到 UserControl 的 Button。从封装的角度来看,我认为这正是我们想要的。

现在让我们说,我在带有 Window 和 UserControl 的 WPF 应用程序中做同样的事情。我通过 Xaml 将 Button 添加到 UserControl,然后将 UserControl 添加到 Window。但现在我可以从 Window 的代码中访问 Button。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.testUserControl1.button1.Content = "What the HELL!";
}  

如果我通过代码而不是 Xaml 添加按钮,我仍然有机会将其设为私有。但是“以声明方式构建 UI,而不是通过代码”——这不是 Xaml 存在的原因吗?那不是打破了封装的概念吗?

编辑:我知道我们大多数人,包括我自己,都使用 MVVM 开发 WPF 应用程序,您不需要从代码隐藏中引用您的 UI 元素。但是这个问题的背景仍然成立,对吧?我经常构建可重用的 UserContolr(不像 MVVM 中那样作为视图)在多个视图中使用它们作为视觉元素,我通常不需要使用 UserControl 的代码隐藏。

4

1 回答 1

3

我不太确定你在说什么。您可以在 XAML 中制作 Button 并将其设为私有:

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

您不必通过代码来完成。只是它默认为(我认为)internal而不是private. 但就像 HB 说的那样,我很少为我的控件命名,所以我自己没有遇到过这个。

于 2012-08-23T22:00:26.660 回答