C# avalondock override contextmenu-找不到类型ContextMenuElement

C# avalondock override contextmenu-找不到类型ContextMenuElement,c#,wpf,contextmenu,avalondock,C#,Wpf,Contextmenu,Avalondock,这是一个后续问题-我已经很好地打开了窗户,我认为这将是困难的一部分;但我在更改上下文菜单时遇到困难 我是WPF和avalondock的新手,这可能很简单,但我错过了 前面的问题以我为例。我遇到了一个“ContextMenuElement not found”(未找到上下文菜单元素)错误,因此选择了更简单的方法: -这是关于用法语文本替换,但我可以修改它。我无法使其工作,然后尝试逐字复制粘贴,但仍然有相同的错误: Cannot find the type ContextMenuElement. N

这是一个后续问题-我已经很好地打开了窗户,我认为这将是困难的一部分;但我在更改上下文菜单时遇到困难

我是WPF和avalondock的新手,这可能很简单,但我错过了

前面的问题以我为例。我遇到了一个“ContextMenuElement not found”(未找到上下文菜单元素)错误,因此选择了更简单的方法:

-这是关于用法语文本替换,但我可以修改它。我无法使其工作,然后尝试逐字复制粘贴,但仍然有相同的错误:

Cannot find the type ContextMenuElement. Note that type names are case sensitive
我在资源字典中找到了它,它指向菜单项的命令部分,例如:

   <MenuItem Header="Fermer"

                  Command="avalonDock:DocumentPaneCommands.CloseThis" />

我错过了什么

编辑:资源词典摘录:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:avalonDock="clr-namespace:AvalonDock;assembly=AvalonDock">

<!--Menu contextuel des onglets de l'avalonDock-->
<ContextMenu x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type avalonDock:DockingManager}, ResourceId={x:Static avalonDock:ContextMenuElement.DocumentPane}}">
    <MenuItem Header="Fermer"
                  Command="avalonDock:DocumentPaneCommands.CloseThis" />
    <MenuItem Header="Fermer tout sauf cet élément"
                        Command="{Binding Path=DataContext.FermerCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>

    <Separator />

您尝试调整的代码看起来是针对1.3版的,您可能正在使用新的2.0版。您改变DockingManager行为的方式已经改变了很多,现在比以往任何时候都简单

这是一个小示例,用于替换DocumentPane中文档的ContextMenu(在v2.0.1320上测试):


在主题中,您可以看到如何使用样式完成此操作

<Style x:Key="{x:Type avalonDock:DockingManager}" TargetType="{x:Type avalonDock:DockingManager}">
    <Setter Property="DocumentContextMenu" Value="{StaticResource AvalonDock_ThemeVS2010_DocumentContextMenu}"/>
...

...

我仍然建议从他们的网站上复制一个主题项目,并为你的应用程序构建你自己的主题。这样,您就可以将所有的修改整齐地存储在一个可重用的dll中。

好的,我现在比一天前了解了很多。我可以看到主题是如何在它自己的项目中构建的,以及绑定和命令引用是如何在内部工作的。我想暂时把它作为一个项目-以后可能会探索可恢复的dll。我也有一个简单的替换上下文菜单,但它没有功能-没有命令。对于AD提供的并且我想要复制的菜单项,我如何重用它们,例如Command=“{Binding Path=CloseCommand}”将变成什么?我似乎无法引用广告:属性。或者我需要为这些实现自己的代码吗?如果不显著更改LayoutItemTemplate或LayoutItemContainerStyle,绑定将是相同的。要访问属性,只需设置xml名称空间(如在theme.xaml中),属性名称空间位于AvalonDock程序集中(它只定义contextmenu中的名称,如果不需要多语言支持,您可以自己执行这些操作)。
<Style x:Key="{x:Type avalonDock:DockingManager}" TargetType="{x:Type avalonDock:DockingManager}">
    <Setter Property="DocumentContextMenu" Value="{StaticResource AvalonDock_ThemeVS2010_DocumentContextMenu}"/>
...