在WPF中设置隐式自定义控件样式

时间:2017-09-28 18:12:34

标签: wpf xaml styles custom-controls

我的自定义控件的默认样式在Generic.xaml中定义,并且工作正常。

但是,当我尝试更改自定义控件的样式时,与内置控件的方式相同,没有任何反应。在App.xaml中,我尝试通过执行以下操作来更改控件的默认样式:

<Style TargetType="{x:Type my:CustomControl}">
  <Setter Property="Background" Value="Red"/>
</Style>

如果我设置上述样式的x:key属性并使用此键引用此样式,则一切正常。

上述样式方法仅适用于内置控件并且不适用于自定义控件,或者我只是做错了,这是否正确?是否有可行的解决方案来实现这种类型的自定义控件样式?

更新 在这种情况下,我的自定义控件派生自System.Windows.Window。

2 个答案:

答案 0 :(得分:0)

我终于设法让我的自定义控件的隐式样式工作。显然,隐式样式可能不适用于派生控件,因为样式不会自动应用于控件。为了实现这一点,必须手动设置资源引用。我的自定义控件现在看起来像这样:

public class CustomControl : Window
{
    static CustomControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl), new FrameworkPropertyMetadata(typeof(CustomControl)));
    }

    public CustomControl()
    {
        SetResourceReference(StyleProperty, typeof(CustomControl));
    }
}

答案 1 :(得分:-1)

是的,你是对的。 Generic.xaml用于自定义控件,App.xaml用于应用程序范围的资源(包括内置控件的样式)。在TargetType中为自定义控件指定App.xaml将不起作用。因此,使用显式样式(使用x:Key)似乎是最简单的解决方案。