Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 将主题应用于控件模板_Silverlight_Themes_Controltemplate - Fatal编程技术网

Silverlight 将主题应用于控件模板

Silverlight 将主题应用于控件模板,silverlight,themes,controltemplate,Silverlight,Themes,Controltemplate,基本上到目前为止,我的问题是我正在将控件模板修改为一个组合框,以便它看起来像我想要的那样。除此之外,我们的整个项目都使用ExpressionDark主题。问题是,当我在组合框上设置样式以便它使用修改后的模板时,它的ExpressionDark样式会被覆盖 我能想到的唯一解决办法是尝试在模板中去掉任何显式着色,但这不起作用。还有OnApplyTemplate,但我不确定该如何使用它 有人对我该怎么做有什么建议吗 谢谢您需要将自定义样式建立在表达式暗主题应用的隐式样式的基础上。只能对元素应用一种隐式

基本上到目前为止,我的问题是我正在将控件模板修改为一个组合框,以便它看起来像我想要的那样。除此之外,我们的整个项目都使用ExpressionDark主题。问题是,当我在组合框上设置样式以便它使用修改后的模板时,它的ExpressionDark样式会被覆盖

我能想到的唯一解决办法是尝试在模板中去掉任何显式着色,但这不起作用。还有OnApplyTemplate,但我不确定该如何使用它

有人对我该怎么做有什么建议吗


谢谢

您需要将自定义样式建立在表达式暗主题应用的隐式样式的基础上。只能对元素应用一种隐式样式。此外,如果显式设置了Style属性,则不会应用任何隐式样式

因此,如果您有表达黑暗主题的隐式样式:

<Style TargetType="ComboBox" ... />
<Style TargetType="ComboBox" ... />
您需要将其分为两种样式,如下所示:

<Style x:Key="ComboBoxBaseStyle" TargetType="ComboBox" ... />
<Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" />
然后您的自定义样式需要进行如下修改:

<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}" ... />
<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" ... />

隐式样式中不应包含任何setter。一切都应该在ComboBoxBaseStyle版本中完成。

我之前看过BasedOn,但没有考虑将其与x:Type结合使用。但是,这种方法的问题是我使用的是Silverlight:我的意思是我仍然可以使用BasedOn属性,但我认为我需要显式引用样式,但它在程序集中,所以我不知道如何执行该操作。@Matt-抱歉,没有注意到您有Silverlight标记。显然,x:类型在那里不起作用。将更新答案。也许我在这里做错了什么,但它并没有按照我预期的方式工作。。。我还应该提到,我从Expression Blend本身构建了控件模板。它为我正在创建的组合框制作的控件模板已经明确定义了颜色方案、很多渐变等等。。。。老实说,在不严重修改控件模板的情况下,让它正常工作的唯一方法似乎是在ComboBoxBaseStyle中使用BasedOn={somethingExpressionDark}。
<Style x:Key="ComboBoxBaseStyle" TargetType="ComboBox" ... />
<Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" />
<Style x:Key="MyStyle" TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBaseStyle}" ... />