新控件模板中的WPF旧控件模板

时间:2018-01-23 08:05:30

标签: c# wpf

我使用外部库中的自定义控件,它具有ControlTemplate的属性。

  <Style x:Key="{x:Type controls:HeaderDiscountButton}" TargetType="{x:Type controls:HeaderDiscountButton}" BasedOn="{StaticResource {x:Type core:ValueButton}}">
        <Setter Property="core:ButtonWithPopup.PopupTemplate">
            <Setter.Value>
                <ControlTemplate> 
                   some complicated xaml code
                </ControlTemplate>
          </Setter.Value>
        </Setter>
  </Style>

我想覆盖它,但在我的新ControlTemplate中使用旧的,例如

  <Style x:Key="{x:Type controls:HeaderDiscountButton}" TargetType="{x:Type controls:HeaderDiscountButton}" BasedOn="{StaticResource {x:Type core:ValueButton}}">
        <Setter Property="core:ButtonWithPopup.PopupTemplate">
            <Setter.Value>
                <ControlTemplate> 
                   <StackPanel>
                      <Border>some complicated xaml code</Border>
                      <Border>some additional xaml code</Border>
                   </StackPanel>
                </ControlTemplate>
          </Setter.Value>
        </Setter>
  </Style>

我想避免复制整个旧代码

1 个答案:

答案 0 :(得分:1)

恐怕这是不可能的。您确实可以将Style基于另一个Style并覆盖特定的设置者,但不能“覆盖”或仅继承ControlTemplate的一部分。不幸的是,您必须(重新)定义整个模板。

因此,在这种情况下,您实际上需要复制(整个)原始模板,然后根据您的要求进行编辑。