如何使WPF样式可inheritance到派生类?

在我们的WPF应用程序中,我们有一个TargetType={x:Type ContextMenu}的全局样式。 我创建了一个派生自ContextMenu的MyContextMenu,但现在默认样式不适用。

如何告诉WPF我希望MyContextMenu从ContextMenuinheritance默认样式? 希望我可以从我的控制本身(通过静态ctor元数据覆盖或其他什么?)中做到这一点,而不必在任何xaml中乱七八糟。

如果您的应用程序中定义了样式,如下所示:

 

那么这是一个隐式Style,而不是默认Style。 默认样式通常与控件或匹配程序集(即MyAssembly.Aero.dll)位于同一程序集中。

隐式样式不会自动应用于派生类型,这可能就是您所看到的。

您可以定义第二个样式,如下所示:

 

或者,您可以利用控件的Style属性。 您可以从XAML执行以下操作

  

或者您可以在MyContextMenu中执行此操作,如下所示:

 public MyContextMenu() { this.SetResourceReference(StyleProperty, typeof(ContextMenu)); }