有时,当我编辑控件原始模板的副本时,我不需要更改原始样式和颜色,并且希望直接引用原始样式和颜色。
例如,我想更改ComboBox
模板以在下拉列表中添加一些过滤按钮,其切换按钮指的是也会复制到文件中的样式。我想参考原始风格,以便我的XAML
不会过于混乱。
编辑: 因此,这是您选择编辑副本时创建的XAML代码的一部分。 ControlTemplate是我想要改变的,但我不需要ComboBoxToggleButton样式,因此对于toggleButton,我想将它的样式设置为从中复制ComboBoxToggleButton样式的样式。是否存在一些存储在其中的命名空间,或者它们是否无法访问?
<Style x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
...
</Style>
<ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}">
<Grid x:Name="templateRoot" SnapsToDevicePixels="true">
...
<ToggleButton x:Name="toggleButton" ... Style="{StaticResource ResourceKey=ComboBoxToggleButton}"/>
</Grid>
</ControlTemplate>
大概是我喜欢它的样子
<Window xmlns:baseStyles="{namespace/url to the default wpf styles}">
<ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}">
<Grid x:Name="templateRoot" SnapsToDevicePixels="true">
...
<ToggleButton x:Name="toggleButton" ... Style="{StaticResource ResourceKey=baseStyles:ComboBoxToggleButton}"/>
</Grid>
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
答案 0 :(得分:1)
要将默认WPF
样式重新用于ComboBox
,请使用:
<Style TargetType="ComboBox">
<!-- Setters in need of change -->
</ Style>
如果您想继承自己创建的Style
,可以使用:
<Style TargetType="ComboBox" BasedOn="{StaticResource YourExistentStyle}">
<!-- Setters that need to change -->
</ Style>
答案 1 :(得分:1)
是的,所以Combobox不是你基本的模板控制。在其中ControlTemplate
是一个独特的ToggleButton(因此它的附加实例特定样式模板)是它所需要的。一旦你引入一个新的ControlTemplate
而不是那个,现在它只知道了。它无法引用原始Style
内的ControlTemplate
模板,因为它不是其外部可用的资源。 Style和ControlTemplate是不同的野兽。
您有两种选择。您可以使用该唯一的ToggleButton样式模板并将其放在某处,可以作为StaticResource到达,并通过正常ControlTemplate
在<ToggleButton Style="{StaticResource ComboBoxUniqueToggleButtonStyleKeyNameYouGiveIt}" ..../>
内的ToggleButton实例上引用它
(就好像它在资源词典中一样,除非它一直加载,而且通常是不必要的)。
或者,您可以将其直接嵌入ControlTemplate
,就像他们in the default style/controltemplate for ComboBox一样。
您可以通过Style
继承BasedOn
模板的部分内容,但一次只能有一个ControlTemplate
。
希望这会有所帮助,我会撤回我的重复投票。