c# – 如何覆盖样式

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

 

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

让我感到困惑的是:如果选择了强调颜色,例如红色,那么标准的ModernUI-Controls(如文本框)可以很好地适应这种颜色:

然而,DecimalUpDown控件坚持其风格.例如,控件在激活时为蓝色,控件中使用的RepeatButtons看起来不像ModernUI按钮:

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

我怎么能改变呢?

编辑:当我遵循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中的RepeatButtons,以便我也可以设置他们的样式?

最佳答案 可能需要编写自己的模板并在那里定义颜色.有时没有直接的方法来更改属性,这些属性是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

点赞