我有一个在整个应用程序中普遍使用的控件,但是根据使用位置的不同,需要将其附加到不同的类中。我想实现一个从UserControl派生的基类,然后从中派生附加到不同模型的类,每个模型也派生自一个基类。
因此,我有一组基本类(BaseControlView,BaseControlViewModel,BaseControlModel),从中可以导出三个类(CarControlView,CarControlViewModel,CarControlModel)和三个类(TruckControlView,TruckControlViewModel和TruckControlModel)。汽车和卡车的属性集相交但不完全相交,而且我无法得知可以使用基类集合访问汽车或卡车所包含的项目。
控件本身使用自定义的VisualStateManager来控制状态更改,并且它需要引用其集合中的某些派生类特定的数据才能这样做。
我已经弄清楚了所有的一切,但是我对于如何处理派生的VisualStateManagers有一个棘手的问题。我在其中指定的xaml看起来像这样:
<UserControl x:Class="View.BaseControl" ... >
<UserControl.Resources>
<!-- All the stuff to get me here -->
<VisualStateManager.CustomVisualStateManager>
<local:BaseControlStateManager/> <! <<<<--- Here! -->
</VisualStateManager.CustomVisualStateManager>
<!-- The rest of the control template definition -->
</UserControl.Resources>
<Grid>
<!-- My components go here -->
</Grid>
</UserControl>
它位于控件资源内的控件的控件模板中。
我想避免为每个派生类制作和修改基类xaml文件的副本,因此我想如果可以在后面的代码中的构造函数中设置CustomVisualStateManager,则我可以有一个空的xaml-仅外部定义-派生类:
<local:BaseControl x:Class="View.CarControl" ... >
</local:BaseControl>
你知道我能做到吗?