在自定义控件模板上使用setter

本文关键字:setter 自定义控件 | 更新日期: 2023-09-27 18:05:46

我有一个资源字典文件,其中我有一个自定义的ControlTemplate定义

<ControlTemplate x:Key="ComboBoxToggleButton"
             TargetType="{x:Type ToggleButton}">
    <Grid>
   ....
   </Grid>
</ControlTemplate>

(取自这里:http://msdn.microsoft.com/en-us/library/ms752094(v=vs.110).aspx(字典文件文件包含整个东西))

我用它来改变控件的外观。但现在,我希望能够通过setter动态改变它的宽度。

但问题是,如果我这样做(在另一个res. dictionary文件中)

<Style TargetType="ComboBox">               
    <Setter Property="Width" Value="250"/>
</Style>

它完全覆盖了我的自定义ControlTemplate,它使用默认的系统组合框,在那里它应用的宽度。但是我想让那个setter把宽度应用到我的自定义ControlTemplate上

在自定义控件模板上使用setter

当你在资源中编写样式时,它将始终覆盖到默认行为
如果你想让它继承其他样式,你需要使用BasedOn property:

<Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxToggleButton}">               
    <Setter Property="Width" Value="250"/>
</Style>