我正在尝试将MenuItems
分解为不同的视图,以使我的应用程序更易于管理。我的意图是在初始化时使用视图发现来构建菜单结构。我的文件菜单位于Menu1Region
中,而我的编辑菜单位于Menu2Region
中。当我运行该应用程序时,“文件”和“编辑”菜单不会下拉,并且标题周围有很多间距,并且右侧有一个子菜单箭头。任何帮助,将不胜感激。
MainWindow.xaml
<Window x:Class="PrismDemo.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
Height="350" Width="525" >
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Menu>
<ContentControl prism:RegionManager.RegionName="Menu1Region" />
<ContentControl prism:RegionManager.RegionName="Menu2Region" />
</Menu>
</Grid>
</Window>
ModuleAModule.cs
using ModuleA.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;
namespace ModuleA
{
public class ModuleAModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
IRegionManager _regionManager = containerProvider.Resolve<IRegionManager>();
_regionManager.RegisterViewWithRegion("Menu1Region", typeof(ViewA));
_regionManager.RegisterViewWithRegion("Menu2Region", typeof(ViewB));
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
}
}
}
ViewB.xaml
<MenuItem Header="Edit"
x:Class="ModuleA.Views.ViewB"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<MenuItem Header="_Copy" />
<MenuItem Header="P_aste" />
</MenuItem>
ViewA.xaml
<MenuItem Header="File"
x:Class="ModuleA.Views.ViewA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<MenuItem Header="Save" />
<MenuItem Header="SaveAs" />
</MenuItem>
尽管我本来想将MenuItem
定义为区域,但我还是决定将Menu
定义为区域并使用StackPanel
。似乎只有一个小问题。当一个菜单被下拉时,将鼠标移至相邻菜单不会自动下拉该相邻菜单,用户必须单击该菜单。
MainWindow.xaml
<Window x:Class="PrismDemo.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
Height="350" Width="525" >
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<ContentControl prism:RegionManager.RegionName="Menu1Region" />
<ContentControl prism:RegionManager.RegionName="Menu2Region" />
</StackPanel>
</Grid>
</Window>
ViewA.xaml
<Menu
x:Class="ModuleA.Views.ViewA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<MenuItem Header="File">
<MenuItem Header="Save" />
<MenuItem Header="SaveAs" />
</MenuItem>
</Menu>
ViewB.xaml
<Menu
x:Class="ModuleA.Views.ViewB"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<MenuItem Header="Edit">
<MenuItem Header="_Copy" />
<MenuItem Header="P_aste" />
</MenuItem>
</Menu>