Style Based在ControlTemplate Resources中定义的样式

时间:2017-03-01 13:50:06

标签: c# wpf xaml

我正在使用第三方ContentControl,其中包含以下主题:

<Style TargetType="{x:Type xyz:XyzControl}" x:Key="XyzControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type xyz:XyzControl}">
                <ControlTemplate.Resources>
                  <Style TargetType="Button">
                     <!-- A lot of styling... -->
                  </Style>
                </ControlTemplate.Resources>
                <!-- More template stuff... -->

我想在此控件中添加一些DataTriggers按钮,但我想保留控件主题中的默认样式。

<xyz:XyzControl>
  <Button>
    <Button.Style>
      <Style TargetType="Button" BasedOn="{???}">
        <Style.Triggers>
        </Style.Triggers>
      </Style>
    </Button.Style>
  </Button>
</xyz:XyzControl>

我尝试基于{StaticResource {x:Type Button}},但这会加载默认的全局按钮样式,而不是此上下文中的默认样式。

2 个答案:

答案 0 :(得分:0)

为第三方的按钮样式添加一个键:

<Style TargetType="Button" x:key="xyzbuttonStyle">

然后:

<Style TargetType="Button" BasedOn="{StaticResource xyzbuttonStyle}">

答案 1 :(得分:0)

这是不可能的,因为您无法将ControlTemplate基于另一个ControlTemplate。您将不得不重新定义整个模板:

WPF: Is there a way to override part of a ControlTemplate without redefining the whole style?

Style添加触发器不会影响或“覆盖”控件ControlTemplate中定义的触发器,因此您必须覆盖整个ControlTemplate从头开始。

您当然可以将默认值复制到XAML标记中,然后根据您的要求进行编辑。