首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mahapps & Prism HamburgerMenu

Mahapps & Prism HamburgerMenu
EN

Stack Overflow用户
提问于 2017-07-18 05:55:06
回答 1查看 1.5K关注 0票数 1

我目前正在建立一个与棱镜和Mahapps的WPF应用程序。

我在用棱镜实现HamburgerMenu时遇到了一个问题。有没有办法通过区域填充HamburgerMenu?

例如,当我使用一个从ItemsControls派生的控件(通过附加的属性RegionManager.RegionName)附加了一个区域时,它会自动将该区域的任何注册视图填充到ItemsControls中。

有没有一种方法可以在HamurgerMenu中模仿这种行为?

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-31 23:16:11

这就是我是如何做到的。

1)命名菜单项集合的区域。

代码语言:javascript
复制
<controls:HamburgerMenu.ItemsSource>
            <controls:HamburgerMenuItemCollection prism:RegionManager.RegionName="MenuRegion"/>
</controls:HamburgerMenu.ItemsSource>

2)定义HamburgerMenuItemCollection的区域适配器

代码语言:javascript
复制
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)在引导程序中注册适配器。

代码语言:javascript
复制
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
    RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
    mappings.RegisterMapping(typeof(HamburgerMenuItemCollection), Container.Resolve<HamburgerMenuItemCollectionRegionAdapter>());
    return mappings;
}

4)定义棱镜模块中的菜单项

代码语言:javascript
复制
public partial class OptionOneMenuItem : HamburgerMenuGlyphItem
{
    public OptionOneMenuItem()
    {
        Glyph = "/Assets/OptionOne.png";
        Label = "Option One";
        Command = ApplicationCommands.NavigateCommand;
        CommandParameter = typeof(OptionOnePageView);

        InitializeComponent();
    }
}

5)最后在模块初始化中注册菜单项。

代码语言:javascript
复制
protected override void InitializeModule()
{
    RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionOneMenuItem));
    RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionTwoMenuItem));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45154263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档