如何从后面的代码设置自定义VisualStateManager?

时间:2019-06-24 21:07:15

标签: c# wpf windows-10 visual-studio-2019

我有一个在整个应用程序中普遍使用的控件,但是根据使用位置的不同,需要将其附加到不同的类中。我想实现一个从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>

你知道我能做到吗?

0 个答案:

没有答案