【发布时间】:2022-01-04 13:45:58
【问题描述】:
我正在尝试使用具有扩展外观配置的组件创建库。 我可以从自定义组件的默认样式继承样式,而不是创建更多样式和模板,并覆盖一些值。
我创建了继承自默认 ContextMenu 和 MenuItem 的 CustomizableContextMenu 和 CustomizableMenuItem 类,并通过额外的构造函数对其进行了扩展。例如 CustomizableContextMenu。
static CustomizableContextMenu()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomizableContextMenu),
new FrameworkPropertyMetadata(typeof(CustomizableContextMenu)));
}
样式和模板位于“Themes/Generic.xaml”文件中引用的单独文件中。
<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 中引用样式,一切正常。但是现在(除了Button、TextBox、ComboBox、CheckBox等其他组件)我有问题了。
我正在尝试使用 CustomizableContextMenu 和 CustomizableMenuItem 创建 CustomizableButton(当我使用标准 Button 时会出现同样的问题),但它不起作用。我从 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并通过在组件定义中设置属性来使用它?
【问题讨论】:
-
您是否在您的
Style中设置OverridesDefaultStyle属性? -
是的,
-
所以删除这个setter?
-
是的,删除这个 setter 会有所帮助
-
太棒了。我发布了一个答案。
标签: c# wpf xaml contextmenu