我正在编写一个需要几个看起来完全相同但执行不同功能的用户控件的wpf程序。使用winForms,我可以扩展基本控件并添加功能,但据我所知,继承xaml文件是不可能的。有没有什么办法可以让不同的代码隐藏类都使用相同的xaml文件进行控制?
答案 0 :(得分:0)
您可以使用MVVM模式执行此操作,并创建可能实现相同接口的多个VM。然后,XAML视图可以依赖于它们共享相同接口的事实绑定到任何VM。
在这种方法中,你根本不会使用背后的代码。
答案 1 :(得分:0)
一种方法是使用继承。一个非常简单的示例是带有单个按钮的UserControl
,它应该在MessageBox
中显示不同的内容。
我们会有这样的事情:
public abstract class SomeUserControl : UserControl
{
//declared by XAML (can be made public with x:FieldModifier="public")
public Button MyButton;
//code-behind
public SomeUserControl() {
InitializeComponent();
}
}
public class MySpecialControl : SomeUserControl {
public MySpecialControl() {
MyButton.Click += (sender, e) => MessageBox.Show("Bla");
}
}
要使用MySpecialControl
,只需在XAML中声明它,就像使用之前的声明一样:
<myNamespace:MySpecialControl />
请注意,如果行为的变化不是很大,您也可以为按钮点击创建抽象方法。
答案 2 :(得分:0)
使用winForms,我可以扩展基本控件
在WPF中不能做类似的事情吗?
创建具有依赖项属性的自定义复合控件,该属性将设置控件的模式以适应其目标使用者的需要。
控件可以基于现有控件或控件。