【问题标题】:How to overwrite a style如何覆盖样式
【发布时间】:2015-06-22 02:17:51
【问题描述】:

我在我的 WPF ModernUI 应用程序中使用 Extended WPF Toolkit 中的 DecimalUpDown 控件:

<xctk:DecimalUpDown Value="{Binding myProperty}" Increment="1"  Maximum="10" Minimum="0" />

让我烦恼的是:如果选择了强调色,例如红色,那么标准的 ModernUI-Controls(例如文本框)会很好地适应该颜色:

DecimalUpDown 控件却坚持其风格。例如,控件处于活动状态时为蓝色,并且控件中使用的 RepeatButtons 看起来不像 ModernUI 按钮:

更糟糕的是:视图中放置 DecimalUpDown 控件的所有文本框现在都呈现这种样式,并以蓝色而不是红色突出显示:

我该如何改变?

编辑:这是我按照 Ben 的好建议生成的 ControlTemplate:

        <ControlTemplate x:Key="ControlControlTemplate1" TargetType="{x:Type Control}">
        <xctk:ButtonSpinner x:Name="PART_Spinner" AllowSpin="{Binding AllowSpin, RelativeSource={RelativeSource TemplatedParent}}" 
                            ...>
            <xctk:WatermarkTextBox x:Name="PART_TextBox" AutoMoveFocus="{Binding AutoMoveFocus, RelativeSource={RelativeSource TemplatedParent}}" 
                                   AutoSelectBehavior="{Binding AutoSelectBehavior, RelativeSource={RelativeSource TemplatedParent}}" 
                                   AcceptsReturn="False" 
                                   .../>
        </xctk:ButtonSpinner>
        <ControlTemplate.Triggers>
            ...
        </ControlTemplate.Triggers>
    </ControlTemplate>

然后可以设置 WatermarkTextBox 和 ButtonSpinner 的样式:

到目前为止我还没有管理:有没有办法访问 ButtonSpinner 中的重复按钮,以便我也可以设置它们的样式?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    可能需要编写自己的模板并在那里定义颜色。有时没有直接的方法来更改作为 UI 元素一部分的属性。 尝试编辑模板的副本并搜索蓝色值。 右键单击 DecimalUpDown 并转到编辑模板

    如果没有设置颜色值,可能是通过 System.Colors 设置的(例如 ActiveBorderBrush)

    <SolidColorBrush x:Key="{x:Static SystemColors.ActiveBorderBrush}" Color="Orange" />
    

    当控件处于活动状态、突出显示等时,System.Colors 定义了一些标准行为。MSDN 列出了所有现有的行为: https://msdn.microsoft.com/en-us/library/system.windows.systemcolors%28v=vs.110%29.aspx

    【讨论】:

    • 这很好,我不知道“编辑模板”选项。在这种情况下,由于控件本身由多个控件组成[一个文本框,两个重复按钮],因此我无法访问“子”控件。不过,非常好!
    • Ben,有没有办法从模板访问子控件?我在我的问题中添加了模板。我可以成功地设置“外部”元素(边框等)的样式,但是例如控件内的RepeatButtons,我无法访问。
    • 也许您可以尝试将 ButtonSpinner 添加为单独的元素并重做“编辑副本”步骤。然后为所有 ButtonSpinner 或命名的创建自定义样式以在 DecimalUpDown 控件中使用。
    猜你喜欢
    • 2019-08-05
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2012-03-19
    • 2014-01-10
    相关资源
    最近更新 更多