好的,我想我在这里遗漏了一些东西。
让我们说,在Winforms应用程序中,我有一个Form和一个UserControl。然后我向UserCntrol添加一个Button,然后将UserControl添加到表单。现在Button作为私有成员添加到UserControl,直到UserControl通过公共属性公开它的私有成员,Form不应该有权访问Button。
private void Form1_Load(object sender, EventArgs e)
{
this.testUserControl1.
}
您将无法从表单的代码中找到UserControl的按钮。从封装的角度来看,我认为这正是我们想要的。
现在让我们说,我在使用Window和UserControl的WPF应用程序中做同样的事情。我通过Xaml向UserControl添加一个Button,然后将UserControl添加到Window。但现在我可以从Window的代码访问Button了。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.testUserControl1.button1.Content = "What the HELL!";
}
如果我通过代码而不是Xaml添加Button,我仍然有机会将其设为私有。但是“以声明方式构建UI, NOT 通过代码” - 这不是Xaml存在的原因吗?那么它是不是打破了封装的概念?
编辑:我知道我们大多数人,包括我自己,都使用MVVM来开发WPF应用程序,您无需从代码隐藏中引用您的UI元素。但问题的背景仍然存在,对吧?我经常构建可重用的UserContolr(不像MVVM中的View那样)通过几个Views作为视觉元素使用它们,我经常需要使用UserControl的代码隐藏。
答案 0 :(得分:3)
我不确定你在说什么。您可以在XAML中创建Button并将其设为私有:
<Button x:FieldModifier="private" x:Name="Whatever" Content="This is a button" />
您无需通过代码执行此操作。只是它默认为(我认为)internal
而不是private
。但是像H.B.说,我很少说出我的控件,所以我自己也没有遇到过。