我像往常一样构建了一个用户控件,它由XAML部分和代码隐藏部分组成。现在,我需要创建另一个用户控件,它共享前者的一些功能,但它们具有不同的外观,并且可能在代码隐藏中具有其他功能。
我的第一个想法是创建一个接口来收集两种控件的常用功能。这是正确的方法吗?我将如何管理我应该拥有的不同XAML部件?欢迎任何建议。
答案 0 :(得分:8)
我想补充一点其他的贡献,我认为这对其他遇到同样情况的人有用。
另一种可能的解决方案,在我看来,如果您要创建的控件不是特别复杂,那么创建一个包含您想要共享的常用功能的基本用户控件:这样的控件将完全写入在C#中。 实际上,这允许在由XAML和后面的代码组成的用户控件中继承。在继承控件的XAML中,而不是
<UserControl> ... </UserControl>
你将
<MyProject: MyBaseControl x:Class="MyProject.MyExtendedControl"> ... </MyProject: MyBaseControl>
然后在后面的代码中你还需要指定以下内容:
class MyExtendedControl : MyBaseControl
希望这有帮助。
答案 1 :(得分:2)
用户控件不适合WPF中的继承,你可以做一些破解工作,但总的来说你可能会更好地使用自定义控件。使用此技术为继承的控件指定不同的XAML更容易。开始使用自定义控件的最简单方法是在类型&#34;自定义控件(WPF)&#34;的项目中添加一个新项目。它将添加控件,XAML将被添加到Themes / generic.xaml中。
要从此控件继承,最简单的方法是添加另一个新的自定义控件(WPF),然后更改后面的代码以从父控件而不是Control继承。
答案 2 :(得分:2)
有许多方法可以分割各个部分,使其更易于使用。
MVHD,如注释中所述,依赖于数据绑定将输入控件与逻辑分开。通过将实现INotifyPropertyChanged的相应类设置为您控制的DataContext,可以更改行为。如果使用之间的差异不是很大,那么您的DataContext类或ViewModel可以实现Visibility属性以显示和隐藏输入的不同部分。
分离功能的另一种方法是通过聚合。见StackOverflow 269496
您可以构建实现通用功能的较小控件,然后通过组合较小的控件(即聚合它们)来构建更大的特殊用途控件,以实现更大的控制。聚合将适用于代码隐藏和数据绑定方法。