我的情况如下。
我有一个App.xaml,其中包含ListView样式,如下所示:
<Style x:Key="{x:Type ListViewItem}" TargetType="ListViewItem">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
...
但是,我想将一些样式添加到另一个xaml中,让我们在Window.xaml中这样说:
<ListView AlternationCount="2" Background="#FFECECEC">
<ListView.Resources>
<Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseDoubleClick" Handler="OnPreviewMouseDoubleClick" />
</Style>
</ListView.Resources>
</ListView>
所以,我想要做的是在App.xaml中将基本设计的样式定义为默认样式。 然后,添加一些修改,例如添加上下文菜单,从每个xaml添加事件。
但是,通过上面的实现,App.xaml中定义的样式将被Window.xaml中定义的样式覆盖。
有没有办法解决问题并实现它?
答案 0 :(得分:9)
样式具有BasedOn
属性:
<Style x:Key="Style1">
...
</Style>
<Style x:Key="Style2" BasedOn="{StaticResource Style1}">
...
</Style>
顺便说一下:<Style x:Key="{x:Type ListViewItem}"
似乎有点奇怪。 x:Key
应该是xaml字典中的唯一键 - 通常是字符串。
答案 1 :(得分:2)
如果 BasedOn 属性符合您的需求,那么它是最佳选择。但是对于更复杂的场景,the solution referred to in this question之类的内容更灵活。