2010-10-12 101 views
0

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

回答

0

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

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

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

另外,您可以创建一个ResourceDictionary以分开您的样式。然后你可以通过App.xaml合并它们...

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

我可能不会很好地解释我自己。我需要自定义视图(派生自ViewBase)因为我需要改变视图(而不是列表框)中的几乎所有内容,例如选择事件和面板。我可能能够在列表视图上单独设置它们,而不是提供自定义视图,但是这不会给我所需的逻辑分组。我希望每个视图都应该有自己的布局容器,选择事件,动画,容器,最后是数据模板。我不能使用上面描述的外部字典(generic.xaml) – Fragilerus 2010-10-12 15:33:40

+0

所以问题的根源在于如何在不使用Generic.xaml的情况下获得自定义控件类型的默认样式? – 2010-10-12 15:40:52