在我们的WPF应用程序中,我们拥有全球风格TargetType={x:Type ContextMenu}.我创建了一个派生自ContextMenu的MyContextMenu,但现在默认样式不适用.
如何告诉WPF我希望MyContextMenu从ContextMenu继承默认样式?希望我可以从我的控件本身(通过静态ctor元数据覆盖或其他什么?)中做到这一点,而不必在任何xaml中乱七八糟.
Cod*_*ked 47
如果您的应用程序中定义了样式,如下所示:
<Style TargetType="{x:Type ContextMenu}" ...
Run Code Online (Sandbox Code Playgroud)
那是一个隐式Style,而不是默认Style.默认样式通常与控件或匹配程序集(即MyAssembly.Aero.dll)位于同一程序集中.
隐式样式不会自动应用于派生类型,这可能就是您所看到的.
您可以定义第二个样式,如下所示:
<Style x:Key="{x:Type ContextMenu}" TargetType="{x:Type ContextMenu}" ...
<Style TargetType="{x:Type local:MyContextMenu}" BasedOn="{StaticResource {x:Type ContextMenu}}" ...
Run Code Online (Sandbox Code Playgroud)
或者,您可以利用控件的Style属性.您可以从XAML执行以下操作
<local:MyContextMenu Style="{DynamicResource {x:Type ContextMenu}}" ...
Run Code Online (Sandbox Code Playgroud)
或者您可以在MyContextMenu中执行此操作,如下所示:
public MyContextMenu() {
this.SetResourceReference(StyleProperty, typeof(ContextMenu));
}
Run Code Online (Sandbox Code Playgroud)