2017-11-15 13 views
0

私はXamarin.Formsのプリズムライブラリを使用しています。プリズムが破損したXamarinフォームを使用したカスタムナビゲーションバー

そして、コントロールテンプレートを使用してカスタムナビゲーションバーを作成します。 (カスタムナビゲーションバーを作成する理由 - 私は、ナビゲーションバーを表示背景の画像に透明にする解決策を見つけられませんでした。また、おそらくナビゲーションバーをカスタマイズしてコントロールを追加します)。

<ControlTemplate x:Key="NavigationPageTemplate"> 
    <AbsoluteLayout BackgroundColor="Transparent"> 

     <Image AbsoluteLayout.LayoutBounds="0,0,1,1" 
       AbsoluteLayout.LayoutFlags="All" 
       Aspect="AspectFill" 
       Source="{TemplateBinding BackgroundImageEx}" /> 

     <ContentView Padding="0,50,0,0" 
        AbsoluteLayout.LayoutBounds="0,0,1,1" 
        AbsoluteLayout.LayoutFlags="All"> 
      <ContentPresenter /> 
     </ContentView> 

     <!--Navigation bar started here --> 
     <ContentView AbsoluteLayout.LayoutBounds="0,0,1,AutoSize" 
        AbsoluteLayout.LayoutFlags="PositionProportional, WidthProportional" 
        BackgroundColor="Transparent"> 
      <ContentView.Padding> 
       <OnPlatform x:TypeArguments="Thickness" 
          Android="10" 
          iOS="10, 20, 10, 0" /> 
      </ContentView.Padding> 

      <controls:ImageButton Command="{TemplateBinding GoBackCommand}" 
            HeightRequest="30" 
            HorizontalOptions="StartAndExpand" 
            Source="ic_back.png" 
            WidthRequest="30"> 

      </controls:ImageButton> 

     </ContentView> 
    </AbsoluteLayout> 
</ControlTemplate> 

私の問題は、プリズムナビゲーションで戻るボタンを処理することです。 MyApp.xaml.csファイルを処理しようとしました。

private void Button_OnClicked(object sender, EventArgs e) 
{ 
    NavigationService.GoBackAsync(); 
} 

そして、私の最初のページを押すと表示されるので、別のナビゲーションスタックがあるようです。

私はナビゲーションをこのように持っていた:

Navigate("FirstPage"); - >Navigate(MasterDetail/NavigationPage/ViewA) - >Navigate("ViewB") ViewB - コントロールテンプレートを使用しています。

ViewB NavigationServiceのカスタム戻るボタンをクリックすると、私をFirstPageに戻します。それは私には間違っています。私はViewAに戻るべきです!

別の質問App.MainPageを変更すると、最初のページを保存する必要がありますか?

答えて

0

ViewAからFirstPageに戻るには、変数がViewBページから特定の値で渡された場合に、バックイベントを代行受信して、再び戻ることができます。コード例:

送信者:

var navigationParams = new NavigationParameters(); 
navigationParams.Add("yourVariableName", "YourVariableValue"); 
_navigationService.GoBackAsync(navigationParams); 

がReceiver:

public void OnNavigatedTo(NavigationParameters parameters) 
     { 
    string myVar = null; 
      if (parameters.ContainsKey("yourVariableName")) 
      { 
       myVar = (string)parameters["yourVariableName"]; 
      } 
    if(myVar=="YourVariableValue"){ 
    NavigationService.GoBackAsync(); 
    } 
} 

私はあなたの2番目の質問を理解していません。

+0

に私FIRSTPAGEがメモリに残っていると、それはNavigationStackから削除されていない理由は2つ目の質問を説明し、問題の説明を参照してください? – Dmitry

+0

スタックなので大丈夫だと思うので、LIFO(最後に先入れ先出し)です。 FirstPageを削除することはできません。削除する唯一の方法は、スタックに最初にputtedされたのですべてのページを削除することです。最後に終了します。 – TeoVr81

関連する問題