2016-04-05 12 views
2

したがって、私はを取得しています。ページには、親なし例外があります。これは、あるページから別のタブに既に含まれている別のページにナビゲートしようとすると発生します。 TabbedPage自体にページを読み込む前に、ページのという1つのリストに入れました。これは明らかにTabbedPageがその子を取得している場所です。私はこのリストを自分のナビゲーションボタンで操作しようとしています。しかし、私はそれらを使用しようとするたびに例外が発生します。Xamarin - TabbedPageのナビゲーションエラー(ページはパラレンテを持つ必要がありません)

pages.Add (new ContentPage { 
    Title="Start Pagina", 
    BackgroundImage="@drawable/background.jpg", 
    Content = new StackLayout { 
     Padding = 50, 
     BackgroundColor = Color.Black, 
     Opacity = 0.75, 
     Children = { 
      //The controls and stuff 
     } 
    } 
}); 

そして、これは私が私のナビゲーションボタンでページのリストを使用している方法です:

private int pageNavCount = 0; 
private list<ContentPage> pages = nwe List<ContentPage> (0); 

public MainCPage() 
{ 
    Create(); 

    Children.Add(pages[0]); 
    Children.Add(pages[1]); 
    Children.Add(pages[2]); 
} 

、ここでは、私がリストにページを置く方法である:ここで私がページをロードする方法です。

private void NavButtonNext_Clicked (object sender, EventArgs e) 
{ 
    pageNavCount++; 
    this.Navigation.PushAsync(pages[pageNavCount]); 
} 

private void NavButtonPrev_Clicked (object sender, EventArgs e) 
{ 
    pageNavCount--; 
    this.Navigation.PushAsync(ages[pageNavCount]); 
} 

私は例外「ページがすでに親てはいけません」を取得し、ボタンを押してみてください。 そして、私は1ページごとに新しいボタンを作ってしまいたくありません!誰かが私がここで間違っていることを教えてもらえますか?

+1

これは役立つかもしれない: https://visualstudiomagazine.com/articles/2015/06/01/navigation-with-xamarin-forms.aspx私はすでにそのページを見てきましたが、 –

+0

おかげで、私手動で追加したくないので、自分のnavbuttonsでページリストを使用したい! –

+0

あなたが達成しようとしていることは本当に不明です。ナビゲーションボタンをクリックすると、別のタブに既に含まれている別のページに切り替えるのですか?または、既に選択されている同じタブ内をナビゲートしたいですか? – Jason

答えて

2

あなたは既に開いている別のタブでページに移動したい場合は、あなたがこのような何かを行う必要があります。

// you will need a reference to your TabbedPage 
pageNavCount--; 
tabs.CurrentPage = pages[pageNavCount]; 

このblogは、プログラムタブを切り替えるには良い過去記事を持っています。

this.Navigation.PushAsync(new MainCPage(pageNavCount)); 

そしてMainCPageコンストラクタで:

public MainCPage (int index) 
{ 

Create(); 

Children.Add(pages[0]); 

Children.Add(pages[1]); 

Children.Add(pages[2]); 

CurrentPage = Children[i]; 

} 

それは最高のアーキテクチャではありませんが、あなたは、少なくともその背後のアイデアを得るでしょう

+0

ここでナビゲートできるはずですが、pageNavCountを使用すると範囲外だと言われますが、pageNavCountの値は3で0から始まります。 –

+0

グローバルに共有されている値か、各ページには値がありますか自分のリファレンス?あなたの質問を編集して、その値がページでどのように初期化されているかを表示できますか? – Jason

+0

完了、最初のコードボックス –

0

のようなものを試してみてください。

+1

あまり効果的ではありませんが、なぜそこにいる間にすべてのページをもう一度追加したいのですか?それに加えて、これは不必要なメモリを要します。とにかく答えてくれてありがとう! –

0

NavigationPage Parentプロパティをnullに設定して問題を解決しました。私は、MasterDetailPageとMessagingCenterを使って、アプリケーション内のナビゲーションを切り替えています。

 MessagingCenter.Subscribe<NavigationPage>(this, "Navigate", (pageItem) => 
     { 
      pageItem.Parent = null; // solution 
      Detail = pageItem; 
      IsPresented = false; 
     }); 
関連する問題