从模块将 MenuItems 添加到 Shell
Posted
技术标签:
【中文标题】从模块将 MenuItems 添加到 Shell【英文标题】:Adding MenuItems to the Shell from Modules 【发布时间】:2021-05-08 03:00:52 【问题描述】:我的外壳有一个Menu
,它定义了一个MenuRegion
。
Menu
是一个ItemsControl
,所以它可以包含MenuItem
s(当然)。
我尝试在包含 MenuItem
s 的模块中创建视图 (UserControl
),并将它们添加到 MenuRegion
,例如
regionManager.Regions["MenuRegion"].Add(theUserControlContainingMenuItems)
但这会在幕后创建另一个 Menu
实例,从而产生问题。
推荐的方法是什么?
【问题讨论】:
【参考方案1】:问题是您创建和UserControl
s 到Menu
而不是MenuItem
s。对于所有ItemsControl
s,这是相同的行为,如果您添加的项目不是该特定控件的容器类型(例如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