2017-08-23 6 views
1

このアプリでは、メインビューコンテナとしてマスターディテールコンテナがあります。ユーザは、メニューとタブバーの両方を介してナビゲーションを実行できるように、タブ付きページをマスター/ディテールコンテナの詳細ページとして使用したいと考えています。 Exrinでこれを達成する方法はありますか? ここまで見てきたように、マスター詳細ページとタブ付きページが別々にサポートされています。どのようにこのページを組み合わせるのですか?Exrinのmasterdetailページの詳細ビューとしてのタブ付きページ

+0

私はまもなくこれを見ていきます。コンテナを持っているので、コンテナ内には複雑な状況があります。 –

+0

さて、これを行う方法が見つかりましたが、NavigationServiceにいくつかのバグがあります。これらを修正し、新しいExrinバージョンをリリースし、それを行う方法を詳しく説明します。 –

+0

@AdamPedley新しいExrinバージョンをお待ちしております:) –

答えて

0

これが機能するには、Exrin 2.0.2以降が必要です。

まず、MasterDetailPageを保持するコンテナを少し更新する必要があります。インタフェースの定義は少し変更されています。

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; 
     } 

    } 
} 

第二に、代わりにコンストラクタでは、スタックの、あなたのTabbedViewContainer通過の通知、および必要に応じてこれを割り当てます。あなたのTabbedViewContainerはこのように見えるかもしれません。

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

このアップデートとHow-toの説明をありがとうございます:)ソリューションは新しいExrinバージョンでは期待通りに機能します。 –

関連する問題