我目前正在建立一个与棱镜和Mahapps的WPF应用程序。
我在用棱镜实现HamburgerMenu时遇到了一个问题。有没有办法通过区域填充HamburgerMenu?
例如,当我使用一个从ItemsControls派生的控件(通过附加的属性RegionManager.RegionName)附加了一个区域时,它会自动将该区域的任何注册视图填充到ItemsControls中。
有没有一种方法可以在HamurgerMenu中模仿这种行为?
问候
发布于 2017-10-31 23:16:11
这就是我是如何做到的。
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)最后在模块初始化中注册菜单项。
protected override void InitializeModule()
{
RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionOneMenuItem));
RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionTwoMenuItem));
}https://stackoverflow.com/questions/45154263
复制相似问题