Wpf 在设计时使用抽象基类呈现用户控件

Wpf 在设计时使用抽象基类呈现用户控件,wpf,visual-studio,xaml,Wpf,Visual Studio,Xaml,我正在处理一个项目,该项目有几个WPF用户控件,这些控件继承自抽象基类(本身基于UserControl)。这些控件在运行时渲染得很好,但它们不会在设计器中渲染 我推测这是因为设计器试图创建xaml根元素的实例,在本例中是我的基类,但它无法创建实例,因为它是抽象的 作为记录,我知道在WPF中使用这种类型的控制层次结构存在“模式与实践”类型的问题,但是重构整个项目目前不是一个选项 我的问题是:我知道有设计时属性用于设置DataContext、DesignWidth等。我想知道的是,当控件加载到设计器

我正在处理一个项目,该项目有几个WPF用户控件,这些控件继承自抽象基类(本身基于UserControl)。这些控件在运行时渲染得很好,但它们不会在设计器中渲染

我推测这是因为设计器试图创建xaml根元素的实例,在本例中是我的基类,但它无法创建实例,因为它是抽象的

作为记录,我知道在WPF中使用这种类型的控制层次结构存在“模式与实践”类型的问题,但是重构整个项目目前不是一个选项


我的问题是:我知道有设计时属性用于设置DataContext、DesignWidth等。我想知道的是,当控件加载到设计器中时,是否可以提供一个“设计时”实例或类型作为替换?

在设计时Visual Studio将尝试创建新的即时UserControl 使用无参数构造函数

如果您不能像这样创建usercontrol instant

var myView = new MyUserControl(); //no params
public MyUserControl() : 
   this(new MockViewModel(), new MockDataContext){ } // mock Designtime constructor

puclic MyUserControl(IViewModel vm, IDataContext context) //runtime constructor
{ 
}
设计者将无法渲染

如果用户控件需要任何参数。最流行的技巧是创建这样的专用构造函数

var myView = new MyUserControl(); //no params
public MyUserControl() : 
   this(new MockViewModel(), new MockDataContext){ } // mock Designtime constructor

puclic MyUserControl(IViewModel vm, IDataContext context) //runtime constructor
{ 
}
在MVVM模式中,一些UserControl.DataContext是需要一些参数的用户定义类型 XAML