编辑wpf控件模板,但使用原始样式

The*_*ser 5 c# wpf xaml controltemplate

有时当我正在编辑控件原始模板的副本时,我不需要更改原始样式和颜色,并且希望直接引用原始样式和颜色.

例如,我想更改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>
Run Code Online (Sandbox Code Playgroud)

而且大约是我喜欢它的样子

<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>
Run Code Online (Sandbox Code Playgroud)

Chr*_* W. 1

是的,所以 Combobox 不是基本的裸模板控件。它里面ControlTemplate有一个它需要的独特的 ToggleButton(因此需要额外的特定于实例的样式模板)。一旦你引入了一个新的ControlTemplate东西,它现在就知道了。它不能引用Style原始模板内的模板ControlTemplate因为它不是外部可用的资源。Style 和 ControlTemplate 是不同的东西。

你有两个选择。您可以采用独特的 ToggleButton 样式模板并将其放在可以作为 StaticResource 访问的位置,并ControlTemplate通过正常方式在您内部的 ToggleButton 实例上引用它<ToggleButton Style="{StaticResource ComboBoxUniqueToggleButtonStyleKeyNameYouGiveIt}" ..../>在你内部的 ToggleButton 实例上引用它 (就像它在资源字典中一样,但它通常会一直加载)没有必要)。

或者,您可以将其直接嵌入到您的代码中ControlTemplate,就像在 ComboBox 的默认样式/控件模板中一样一样。

Style您可以通过继承模板的一部分BasedOn,但只能拥有一个ControlTemplate,但一次

希望这有帮助,我会撤回我的重复投票。