基本上我到目前为止的问题是我正在将控件模板修改为ComboBox,以便它看起来像我想要的那样。最重要的是,我们整个项目都使用ExpressionDark主题。问题是,当我在ComboBox上设置样式以便它使用我修改过的模板时,它会覆盖ExpressionDark样式。
我能想到的唯一解决方案是尝试在模板中取出任何明确的颜色,但这不起作用。还有OnApplyTemplate(),但我不确定应该如何使用它。
有人对如何解决这个问题有一些建议吗?
由于
答案 0 :(得分:0)
您需要将自定义样式基于Expression Dark主题应用的隐式样式。您只能将一个隐式样式应用于元素。最重要的是,如果您显式设置Style属性,则不会应用任何隐式Style。
因此,如果你有表达暗主题的隐式样式:
<Style TargetType="ComboBox" ... />
自定义样式如:
<Style x:Key="MyStyle" TargetType="ComboBox" ... />
并像这样使用它:
<ComboBox Style="{StaticResource MyStyle}" ... />
然后你需要将MyStyle更改为基于隐式Style,所以它的Setters和Triggers也是这样应用的:
<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}" ... />
这显然要求可以从定义自定义样式的位置访问隐式样式资源。如果隐式Style在应用程序资源中,那么你应该很好。
编辑:
由于您使用的是Silverlight,因此不支持x:Type
部分。您需要修改Expression Dark主题才能使其正常工作。
因此,如果你有表达暗主题的隐式样式:
<Style TargetType="ComboBox" ... />
您需要将其分解为两种样式:
<Style x:Key="ComboBoxBaseStyle" TargetType="ComboBox" ... />
<Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" />
然后你的自定义样式需要像这样修改:
<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" ... />
隐式Style不应包含任何Setter。一切都应该在ComboBoxBaseStyle版本中完成。