主顶部菜单和右键单击上下文菜单之间的WPF共享菜单

姆加默兹

我正在尝试在应用程序顶部菜单栏上的某项与WPF界面中某项的右键单击上下文菜单之间建立共享菜单。我已经搜索过aroudn,但是我不知道该如何仅共享菜单项列表。

这是帮助您描述UI的图片:

在此处输入图片说明

其工作原理是当选择列表中(如在背景显示)项目,这个菜单变得可以使用。我要这样做,以便当您右键单击列表中的项目时,它也显示相同的菜单。我想避免重复代码,因此我在窗口资源中为MenuItem定义了一个资源:

<MenuItem x:Key="modUtilsMenu">
    <MenuItem Header="{Binding SelectedMod.ModName}" IsEnabled="False" FontWeight="Bold" />
    <MenuItem Header="{DynamicResource string_Checkforupdates}" Command="{Binding SelectedModCheckForUpdatesCommand}" ToolTip="{DynamicResource string_tooltip_checksForUpdatesToThisMod}" >
        <MenuItem.Icon>
            <fa:ImageAwesome Style="{StaticResource EnableDisableImageStyle}" Icon="Cloud" Foreground="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}" Height="16" Width="16"/>
        </MenuItem.Icon>
    </MenuItem>
    <MenuItem Header="{DynamicResource string_RestoremodfromME3Tweaks}" Command="{Binding RestoreModFromME3TweaksCommand}" ToolTip="{DynamicResource string_tooltip_forcesUpdateCheck}" >
        <MenuItem.Icon>
            <fa:ImageAwesome Style="{StaticResource EnableDisableImageStyle}" Icon="CloudDownload" Foreground="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}" Height="16" Width="16" RenderOptions.BitmapScalingMode="HighQuality"/>
        </MenuItem.Icon>
    </MenuItem>
    ...

然后,将其作为Mod Utils菜单项的子元素添加到界面中:

<MenuItem Header="{DynamicResource string_ModUtils}" Padding="4" IsEnabled="{Binding SelectedMod,  Converter={StaticResource NullEnabledConverter}}">
     <StaticResource ResourceKey="modUtilsMenu"/>
</MenuItem>

显然,这是行不通的,因为它在资源中定义了第二个MenuItem。

在此处输入图片说明

但是,我不确定如何存储菜单项的“列表”以添加为另一个对象的子项,因为MenuItem和ContextMenu的根容器元素不同。这些都是基于命令的菜单项。我的上下文菜单也会遇到相同的问题-如何只共享内容而不共享容器?我需要进行数据绑定吗?

我研究了如何在WPF中的上下文菜单和常规菜单之间共享菜单定义,但这似乎仅适用于单个菜单项。我想我可以为每个人做到这一点,但是我正在寻找是否有办法做到这一点,我只需要在一个地方更新它,而不是三个地方就可以使它工作。

仿生代码

MenuContextMenu均为type ItemsControl您可以这样对待它们,例如绑定到项目模型的集合并指定DataTemplate

下面的示例创建MenuItemas XAML资源的集合
要允许集合的多个实例,将x:Shared属性设置为至关重要False否则,无论引用多少,菜单都只会在视觉树的一个位置呈现:

<Window>
  <Window.Resources>
    <x:Array x:Key="SharedMenuItems" 
             Type="MenuItem" 
             x:Shared="False">
      <MenuItem Header="File">
        <MenuItem Header="Save" />
      </MenuItem>
      <MenuItem Header="Settings" />
    </x:Array>
  </Window.Resources>

  <StackPanel x:Name="RootPanel" viewModels:Item.IsMarkedAsRead="True">
    <Menu ItemsSource="{StaticResource SharedMenuItems}" />

    <Grid>
      <Grid.ContextMenu>
        <ContextMenu ItemsSource="{StaticResource SharedMenuItems}" />
      </Grid.ContextMenu>

    </Grid>
  </StackPanel>
</Window>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

禁用右键单击上下文菜单?

来自分类Dev

右键单击Android上下文菜单

来自分类Dev

右键单击上下文菜单

来自分类Dev

禁用上下文菜单和右键菜单

来自分类Dev

右键单击 Google Chrome 的顶部栏不显示默认上下文菜单

来自分类Dev

右键单击添加上下文菜单。

来自分类Dev

使用Java禁用上下文菜单(右键单击)

来自分类Dev

右键单击添加上下文菜单。

来自分类Dev

右键单击上下文菜单长按Qt

来自分类Dev

AutoHotkey脚本,用于“右键单击上下文菜单”命令

来自分类Dev

AutoHotkey脚本,用于“右键单击上下文菜单”命令

来自分类Dev

右键单击上下文菜单后,获取选定的项目

来自分类Dev

Python IDLE从右键单击上下文菜单中消失了

来自分类Dev

仅在桌面添加右键单击上下文菜单

来自分类Dev

在 React 中禁用 Firefox 的右键单击上下文菜单

来自分类Dev

右键单击Javascript切换默认和自定义上下文菜单

来自分类Dev

Windows 10 - 右键单击上下文菜单和设置应用程序冻结/挂起

来自分类Dev

在右键菜单中将右键单击目标传递给上下文相关的应用程序

来自分类Dev

右键单击带有WPF的CefSharp Chromium Web浏览器时,删除默认上下文菜单

来自分类Dev

上下文菜单单击Android

来自分类Dev

上下文菜单MenuItem单击“数据上下文”?

来自分类Dev

Windows上的Google备份和同步仍然可以使用右键单击上下文菜单吗?

来自分类Dev

WPF TaskbarIcon上下文菜单

来自分类Dev

WPF上下文菜单命令绑定

来自分类Dev

ListBoxItems 上的 WPF 上下文菜单

来自分类Dev

如何在TableView rowDelegate中单击鼠标右键显示上下文菜单

来自分类Dev

触摸设备上嵌入的youtube视频自动显示右键单击上下文菜单

来自分类Dev

右键单击GtkTreeView中的上下文菜单(仅适用于指定的列)

来自分类Dev

右键单击之前不应用上下文菜单样式

Related 相关文章

  1. 1

    禁用右键单击上下文菜单?

  2. 2

    右键单击Android上下文菜单

  3. 3

    右键单击上下文菜单

  4. 4

    禁用上下文菜单和右键菜单

  5. 5

    右键单击 Google Chrome 的顶部栏不显示默认上下文菜单

  6. 6

    右键单击添加上下文菜单。

  7. 7

    使用Java禁用上下文菜单(右键单击)

  8. 8

    右键单击添加上下文菜单。

  9. 9

    右键单击上下文菜单长按Qt

  10. 10

    AutoHotkey脚本,用于“右键单击上下文菜单”命令

  11. 11

    AutoHotkey脚本,用于“右键单击上下文菜单”命令

  12. 12

    右键单击上下文菜单后,获取选定的项目

  13. 13

    Python IDLE从右键单击上下文菜单中消失了

  14. 14

    仅在桌面添加右键单击上下文菜单

  15. 15

    在 React 中禁用 Firefox 的右键单击上下文菜单

  16. 16

    右键单击Javascript切换默认和自定义上下文菜单

  17. 17

    Windows 10 - 右键单击上下文菜单和设置应用程序冻结/挂起

  18. 18

    在右键菜单中将右键单击目标传递给上下文相关的应用程序

  19. 19

    右键单击带有WPF的CefSharp Chromium Web浏览器时,删除默认上下文菜单

  20. 20

    上下文菜单单击Android

  21. 21

    上下文菜单MenuItem单击“数据上下文”?

  22. 22

    Windows上的Google备份和同步仍然可以使用右键单击上下文菜单吗?

  23. 23

    WPF TaskbarIcon上下文菜单

  24. 24

    WPF上下文菜单命令绑定

  25. 25

    ListBoxItems 上的 WPF 上下文菜单

  26. 26

    如何在TableView rowDelegate中单击鼠标右键显示上下文菜单

  27. 27

    触摸设备上嵌入的youtube视频自动显示右键单击上下文菜单

  28. 28

    右键单击GtkTreeView中的上下文菜单(仅适用于指定的列)

  29. 29

    右键单击之前不应用上下文菜单样式

热门标签

归档