如何覆盖样式

时间:2015-04-15 22:07:22

标签: c# wpf

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

enter image description here

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

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

enter image description here

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

enter image description here

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

enter image description here

如何更改?

编辑:当我遵循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的样式:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

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

如果没有设置颜色值,可以通过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