这就是我管理它的方法。
1)为菜单项集合命名一个区域。
<controls:HamburgerMenu.ItemsSource>
<controls:HamburgerMenuItemCollection prism:RegionManager.RegionName="MenuRegion"/>
</controls:HamburgerMenu.ItemsSource>
2)定义的区域适配器用于HamburgerMenuItemCollection
public class HamburgerMenuItemCollectionRegionAdapter : RegionAdapterBase<HamburgerMenuItemCollection>
{
public HamburgerMenuItemCollectionRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, HamburgerMenuItemCollection regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach (HamburgerMenuGlyphItem element in e.NewItems)
{
regionTarget.Add(element);
}
}
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
3)注册在引导程序的适配器。
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
mappings.RegisterMapping(typeof(HamburgerMenuItemCollection), Container.Resolve<HamburgerMenuItemCollectionRegionAdapter>());
return mappings;
}
4)在棱镜模块
public partial class OptionOneMenuItem : HamburgerMenuGlyphItem
{
public OptionOneMenuItem()
{
Glyph = "/Assets/OptionOne.png";
Label = "Option One";
Command = ApplicationCommands.NavigateCommand;
CommandParameter = typeof(OptionOnePageView);
InitializeComponent();
}
}
5)最后在寄存器模块initialsation菜单项定义菜单项。
protected override void InitializeModule()
{
RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionOneMenuItem));
RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionTwoMenuItem));
}
感谢您的回答, 我已经发现自己的解决方案(类似于你的建议):) – Malte
我尝试这个解决办法,但我得到一个无效转换异常。 此外,没有办法从继承的类构造函数中调用InitializeComponent,因为该方法不存在于基类中。 –
你可以发布你的代码吗?我不明白为什么你需要调用InitializeComponent。你能证明这一点和例外地点吗? –