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

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

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

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

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

推荐的方法是什么?

【问题讨论】:

    标签: c# wpf prism modularity


    【解决方案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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2012-01-18
      • 1970-01-01
      • 2020-06-16
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多