【问题标题】:Using setters on custom controltemplate在自定义控件模板上使用设置器
【发布时间】:2014-05-29 15:36:54
【问题描述】:

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

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

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

我用它来稍微改变控件的外观。但是现在,我希望能够使用设置器动态更改它的宽度。

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

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

它完全覆盖了我的自定义 ControlTemplate,并使用了默认的系统组合框,并在其中应用了该宽度。 但我希望该设置器将宽度应用于我的自定义 ControlTemplate。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    当您在资源中编写样式时,它总是会覆盖默认行为
    如果您希望它继承一些其他样式,您需要使用BasedOn 属性:

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

    【讨论】:

    • 它说“找不到资源”
    • 我的错在这里,没有注意到 ComboBoxToggleButton 是 ControlTemplate 而不是 Style。无论如何,您的控件是否有 Template="{StaticResource ComboBoxToggleButton}"?因为你的代码对我有用
    • 你的意思是 本身?不,我在全局范围内使用 TargetType="ComboBox" 为所有组合框蒙皮,这样我就不必在每个组合框中有很多额外的代码。我需要添加它才能使用它吗?
    • 这是我发布的链接中的代码,我只是将其放入资源字典文件中,然后将其包含到我的 window.xaml 文件中,它会自动影响所有组合框
    • 然后将其包含到我的 window.xaml 文件中。怎么样?
    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多