WPF ControlTemplate: How to provide a default value for TemplateBinding? WPF ControlTemplate: How to provide a default value for TemplateBinding? wpf wpf

WPF ControlTemplate: How to provide a default value for TemplateBinding?


You can just define setters on your style for the two properties in question.

For example, some general definitions:

<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">    <GradientStop Color="#F3F3F3" Offset="0"/>    <GradientStop Color="#EBEBEB" Offset="0.5"/>    <GradientStop Color="#DDDDDD" Offset="0.5"/>    <GradientStop Color="#CDCDCD" Offset="1"/></LinearGradientBrush><SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>

Then, in your style definition:

<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}" /><Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}" />


<Style TargetType="{x:Type WPFControls:MyButton}">    <Setter Property="Background" Value="Black">    <Setter Property="Template">        <Setter.Value>            <ControlTemplate TargetType="{x:Type WPFControls:MyButton}">                <Button                     x:Name="PART_Button"                    Background="{TemplateBinding Background}"                    BorderBrush="{TemplateBinding BorderBrush}"                    />            </ControlTemplate>        </Setter.Value>    </Setter></Style>

Pay attention on seccond string, I set Black color to Background default value.


When you declare a dependency property for your controls you also declare the default as UIPropertyMetadata

this property defaults to Brushes.Red, as you can see in the last line.

  public Brush MyBrush {     get { return (Brush)GetValue(MyBrushProperty); }     set { SetValue(MyBrushProperty, value); }  }  public static readonly DependencyProperty MyBrushProperty =      DependencyProperty.Register("MyBrush", typeof(Brush), typeof(MyQsFeature), new UIPropertyMetadata(Brushes.Red));

the other way you could do it is by setting the default colour in the constructor of your custom control, as the constructor always gets called before any properties are set by the user if the user fails to set them they would default to yours. In fact they would always get set by you and then any user setting will override yours. This is esp effective if you want to set the properties such as Background that you are not actually creating, the ones that are coming from your the base classes that you are inheriting from.