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

Setting implicit style of custom control in WPF

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

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

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

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

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

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

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

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

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

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