Вам необходимо определить стиль по умолчанию для элемента управления MyButton
; который будет храниться в файле Themes/Generic.xaml
.
<Style TargetType="{x:Type local:MyButton}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="MyColor" Value="Blue"/>
</Style>
Эта кнопка теперь по умолчанию будет иметь свойство MyColor
, установленное на Blue
, если явно не указано иное для каждого экземпляра элемента управления.
<Grid>
<local:MyButton Height="30" VerticalAlignment="Top">MyButtonDefault</local:MyButton>
<local:MyButton Height="30" VerticalAlignment="Bottom" MyColor="Red">MyButtonRed</local:MyButton>
</Grid>
Ниже приведен источник MyButton
, в котором я изменяю свойство Background
для этого примера на основе свойства MyColor
.
public class MyButton : Button
{
static MyButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyButton), new FrameworkPropertyMetadata(typeof(MyButton)));
}
public Color MyColor
{
get { return (Color)GetValue(MyColorProperty); }
set { SetValue(MyColorProperty, value); }
}
// Using a DependencyProperty as the backing store for MyColor. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyColorProperty =
DependencyProperty.Register("MyColor", typeof(Color), typeof(MyButton), new PropertyMetadata(new PropertyChangedCallback(Change)));
private static void Change(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
MyButton element = target as MyButton;
element.Background = new SolidColorBrush((Color)e.NewValue);
}
}
UPDATE:
Чтобы вернуть цвет к значению по умолчанию, просто наберите ClearValue(DependencyProperty)
в экземпляре MyButton
.
private void MyButton_Click(object sender, RoutedEventArgs e)
{
MyButton myButton = sender as MyButton;
myButton.ClearValue(MyButton.MyColorProperty);
}