peter
peter

Reputation: 2103

How to overwrite a style

I use the DecimalUpDown control from the Extended WPF Toolkit in my WPF ModernUI app:

enter image description here

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

What bugs me is this: If an accent color is selected, for example red, then standard ModernUI-Controls such as textboxes adapt that color nicely:

enter image description here

The DecimalUpDown control however sticks to its style. For example, the control is blue when it is active and the RepeatButtons used in the control do not look like ModernUI buttons:

enter image description here

Even worse: all TextBoxes in the View where the DecimalUpDown control is placed now exhibit this style and are highlighted in blue instead of red:

enter image description here

How can I change that?

EDIT: this is the generated ControlTemplate when I follow Ben's good advice:

        <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>

It's then possible to style the WatermarkTextBox and the ButtonSpinner:

enter image description here

What I have not managed so far: Is there a way to access the RepeatButtons inside the ButtonSpinner, so that I can set their styles as well?

Upvotes: 4

Views: 869

Answers (1)

Ben
Ben

Reputation: 935

It´s probably necessary to write your own template and define the color there. Sometimes there is no direct way to change properties which are part of the UI-element. Try to edit a copy of the template and search for the blue color value. Right click the DecimalUpDown and go to edit template Edit Template

If the color value is no set there, it´s possible it´s set via the System.Colors (e.g. ActiveBorderBrush)

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

The System.Colors define some standard behavious when a control is active, highlighted, etc. MSDN lists all existing ones: https://msdn.microsoft.com/en-us/library/system.windows.systemcolors%28v=vs.110%29.aspx

Upvotes: 3

Related Questions