没有Generic.xaml的WPF自定义视图

时间:2010-10-12 15:08:56

标签: wpf listview custom-view

我正在尝试实现特定于应用程序的自定义视图而没有任何运气。这是我的问题: 我需要一个自定义视图,因为我希望用户能够在运行时动态切换视图。我需要一个自定义视图(而不是只有datatemplates)因为listview布局必须改变以及Control模板和数据模板。 所有的turorial都说要实现从viewbase派生的Custom类,并覆盖DefaultStyleKey和ItemContainerDefaultStyleKey以返回generic.xaml中定义的ComponentResourceKey。但是,问题是我正在尝试创建几个非常特定于该应用程序的视图。某些画笔和字体将与应用程序保持一致,自定义视图将使用这些。即我有应用程序级别的Forebrush,Shadowbrush,Deepshadowbrush,TextDecorator等,我希望视图使用这些。如果视图将在外部generic.xaml中定义,那么绑定到这些将是非常复杂的标记。此外,无论如何它都会使它们具有应用特性(如果它们与这些画笔绑定)。 任何人都知道如何在应用程序中内部定义视图的样式,这些样式将能够在运行时更改?

1 个答案:

答案 0 :(得分:0)

我对你的细节感到有些困惑,但是你可以在运行时设置ListView的样式......其中CustomStyle是你想要应用于ListView的预定义样式。

ListView view = new ListView();
view.Style = CustomStyle;

DefaultStyleKey适用于自定义控件(这与UserControl不同)。所以说你想要一个名为Widget的新控件。您需要为该Widget定义DefaultStyleKey,因为它没有定义默认样式。 UserControl是Controls的集合,因此它没有预定义的样式。

此外,您可以创建ResourceDictionary来分解您的样式。然后,您可以通过App.xaml合并它们......

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Themes/Generic.xaml"/>
                <ResourceDictionary Source="Themes/ListViewStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>