从模块将 MenuItems 添加到 Shell

Posted

技术标签:

【中文标题】从模块将 MenuItems 添加到 Shell【英文标题】:Adding MenuItems to the Shell from Modules 【发布时间】:2021-05-08 03:00:52 【问题描述】:

我的外壳有一个Menu,它定义了一个MenuRegionMenu 是一个ItemsControl,所以它可以包含MenuItems(当然)。

我尝试在包含 MenuItems 的模块中创建视图 (UserControl),并将它们添加到 MenuRegion,例如

regionManager.Regions["MenuRegion"].Add(theUserControlContainingMenuItems)

但这会在幕后创建另一个 Menu 实例,从而产生问题。

推荐的方法是什么?

【问题讨论】:

【参考方案1】:

问题是您创建和UserControls 到Menu 而不是MenuItems。对于所有ItemsControls,这是相同的行为,如果您添加的项目不是该特定控件的容器类型(例如ListView 中的ListViewItem),该项目将自动包装在容器中。

让我们假设,您已经像这样定义了菜单区域。

<Menu DockPanel.Dock="Top" prism:RegionManager.RegionName="x:Static regions:RegionNames.Menu"/>

由于 Visual Studio 不提供添加新 MenuItem 的模板,因此请创建一个 UserControl,然后像这样更改 XAML 和代码隐藏文件的内容。

FileMenuItem.xaml.cs 的内容

<MenuItem x:Class="Example.FileMenuItem"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          xmlns:prism="http://prismlibrary.com/"
          prism:ViewModelLocator.AutoWireViewModel="True"
          mc:Ignorable="d"
          Header="File">
   <MenuItem Header="New"/>
   <MenuItem Header="Open"/>
   <MenuItem Header="Save"/>
</MenuItem>

FileMenuItem.cs 的内容

using System.Windows.Controls;

namespace Example

   public partial class FileMenuItem : MenuItem
   
      static FileMenuItem()
      
      

      public FileMenuItem()
      
         InitializeComponent();
      
   

为您的每个菜单项创建这些文件,以下将起作用。

regionManager.Regions["MenuRegion"].Add(new FileMenuItem());

【讨论】:

以上是关于从模块将 MenuItems 添加到 Shell的主要内容,如果未能解决你的问题,请参考以下文章

无法在AndroidManifest.xml中添加Intent

JPA 2.0:自动将实体类*从不同的 jar* 添加到 PersistenceUnit

Yolov5--从模块解析到网络结构修改(添加注意力机制)

如何将 sqlite3 模块添加到 Python?

将模块(特别是 pymorph)添加到 Spyder(Python IDE)

如何从项目中导入模块[重复]