首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选项卡式页面作为Exrin中的masterdetail页面的详细信息视图

选项卡式页面作为Exrin中的masterdetail页面的详细信息视图
EN

Stack Overflow用户
提问于 2017-08-23 20:47:50
回答 1查看 136关注 0票数 1

在我们的应用程序中,有一个主-细节容器作为主视图容器。我们希望将选项卡页作为主-详细容器的详细页,以便用户能够通过菜单和选项卡栏执行导航。有没有什么方法可以用Exrin实现这一点?据我们所见,支持主-详细页面和单独的选项卡式页面。如何将这些页面组合在一起?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-26 14:59:28

您需要安装Exrin 2.0.2和更高版本才能正常工作。

首先,您需要稍微更新您的容器,它包含MasterDetailPage。接口定义略有更改。

代码语言:javascript
复制
public class MainContainer : ViewContainer, IMasterDetailContainer
{
    private MasterDetailPage page;
    public MainContainer(TabbedViewContainer mainStack, MenuStack menuStack)
        : base(Containers.Main.ToString())
    {
        page = new MasterDetailPage();
        var mdp = new MasterDetailProxy(page);
        NativeView = mdp.View;
        Proxy = mdp;
        DetailStack = mainStack;
        MasterStack = menuStack;
        RegionMapping.Add(Regions.Menu, ContainerType.Master);
        RegionMapping.Add(Regions.Main, ContainerType.Detail);
    }

    private IHolder _detailStack;
    public IHolder DetailStack { get { return _detailStack; } set { _detailStack = value; if (_detailStack is ITabbedContainer container) ((ViewContainer)container).ParentContainer = this; } }

    private IHolder _masterStack;
    public IHolder MasterStack { get { return _masterStack; } set { _masterStack = value; if (_masterStack is ITabbedContainer container) ((ViewContainer)container).ParentContainer = this; } }

    public IMasterDetailProxy Proxy { get; set; }

    public bool IsPresented
    {
        get
        {
            return page.IsPresented;
        }
        set
        {
            page.IsPresented = value;
        }
    }

    public void SetStack(ContainerType type, object newPage)
    {
        switch (type)
        {
            case ContainerType.Detail:
                page.Detail = newPage as Page;
                break;
            case ContainerType.Master:
                page.Master = newPage as Page;
                break;
        }

    }
}

其次,请注意,不是在构造函数中使用Stack,而是通过TabbedViewContainer进行传递,并根据需要进行分配。您的TabbedViewContainer可能如下所示。

代码语言:javascript
复制
public class TabbedViewContainer : Exrin.Framework.ViewContainer, ITabbedContainer
{

    public TabbedViewContainer(MainStack mainStack, SecondStack secondStack)
        : base(Containers.Tabbed.ToString(), null)
    {
        Children = new List<IStack>() { mainStack, secondStack };
        var tabbedPage = new Xamarin.Forms.TabbedPage();
        var tabbed = new TabbedProxy(tabbedPage);
        NativeView = tabbed.View;

        foreach (var child in Children)
        {
            tabbed.Children.Add(child.Proxy.NativeView);
        }
    }


    public IList<IStack> Children { get; set; }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45840190

复制
相关文章

相似问题

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