WPF ContextMenu和MenuItem无法在默认样式WPF中设置OverridesDefaultStyle属性



我正在尝试创建具有扩展外观配置的组件库。不用创建更多的样式和模板,我可以从自定义组件的默认样式继承样式,并覆盖一些值。

我创建了从默认ContextMenu和MenuItem继承的CustomizableContextMenu和CustomizableMenuItem类,并通过额外的构造函数对它们进行了扩展。例如CustomizableContextMenu。

static CustomizableContextMenu()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomizableContextMenu),
new FrameworkPropertyMetadata(typeof(CustomizableContextMenu)));
}

样式和模板在单独的文件中,这些文件在文件"中被引用;主题/通用.xml";。

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/FluentControls;component/Themes/CustomizableContextMenuStyle.xaml"/>
<ResourceDictionary Source="pack://application:,,,/FluentControls;component/Themes/CustomizableMenuItemStyle.xaml"/>  
</ResourceDictionary.MergedDictionaries>
<Style BasedOn="{StaticResource CustomizableContextMenuStyle}" TargetType="{x:Type components:CustomizableContextMenu}"/>
<Style BasedOn="{StaticResource CustomizableMenuItemStyle}" TargetType="{x:Type components:CustomizableMenuItem}"/>

在我尝试在同一个应用程序中创建样式和模板(不覆盖DefaultStyleKeyProperty(并引用MainWindow.xaml中的样式之前,一切都很好。但现在(除了其他组件,如按钮,文本框,组合框,复选框等(我有一个问题

我正试图用CustomizableContextMenu和CustomizableMenuItem创建CustomizableButton(当我使用标准按钮时也会出现同样的问题(,但没有成功。我从IDE得到的消息是">无法在默认样式中设置OverridesDefaultStyle属性";

这是CustomizableContextMenu的实现代码。

<Components:CustomizableButton
...
Content="I have ContextMenu!">
<Button.ContextMenu>
<Components:CustomizableContextMenu
Background="#C0000000"
BorderBrush="#C00078D7"
BorderThickness="1"
Foreground="White">
<Components:CustomizableMenuItem
Background="#C0000000"
BorderBrush="#C00078D7"
Foreground="White"
Header="Item Test 1"
InputGestureText="Ctrl+1"
Margin="0,1"/>
</Components:CustomizableContextMenu>
</Button.ContextMenu>
</Components:CustomizableButton>

用简单的方法做这件事是可能的,还是不可能?我必须删除DefaultStyleKeyProperty的覆盖,并以传统方式将样式导入MainWindow.xaml,并通过在组件定义中设置属性来使用它?

从默认样式中删除以下<Setter>

<Setter Property="OverridesDefaultStyle" Value="True" />

由于themes/generic.xaml中的样式是默认样式,因此无法覆盖其他默认样式。

最新更新