在我们的WPF应用程序中,我们有一个自定义的列表框,当未设置样式时,它与默认的Windows主题相匹配,比如突出显示、悬停或选定的项目(即漂亮的蓝色半透明渐变)。
但是,当我们尝试创建自己的ListBoxItem模板并使用以下代码中的值时...
<Trigger Property="Selector.IsSelected" Value="True">
<Setter TargetName="Bd" Property="Panel.Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
</Trigger>...the控件将丢失所有Aero主题的痕迹,恢复为旧的Win95/Classic外观。我们怎么能说‘嘿...将主题的’突出显示‘样式应用于我们的边框。’?
同样,在我们重新创建控件模板之前,资源显然是按原样加载的,但是我们应该如何访问主题的内置样式呢?毕竟,这种“选择”的外观到处都是……ListBox、ComboBox、ListView,无处不在。我们只是希望它也在我们的控制之下,而不必重新发明轮子。
注意:我们使用ShowMeTheTemplate.exe应用程序来获取默认的'Aero‘样式,但同样,这不是我们在运行它时看到的。
发布于 2012-08-26 21:39:45
你的答案似乎在这里:
....you应该使用ItemsContainerStyle,而不仅仅是定义一个替换的ItemTemplate...and定义您的Style,使用BasedOn来继承主题为您的FrameworkElement元素定义的默认样式。
您还可以使用其他一些技术来利用主题定义的默认样式(...just为您提供了额外的选项)。
还有另一种上面没有介绍的技术,它使用标记扩展将一些样式合并在一起(即,您可以合并默认样式和您的样式)。
发布于 2012-08-26 22:57:23
您可以在您的Style中使用BasedOn="{StaticResource {x:Type ItemType}}"来修改现有的模板,但是没有办法将默认模板的一部分与您的自定义模板合并,模板是整体的。
https://stackoverflow.com/questions/12128138
复制相似问题