ここ3ヶ月ほどXamarin + Prism.Formsで開発しているのですが、ページによってNavigationの背景色を変えたいというケースで躓きました
結論、Prismは全く関係ないのですが、Prism利用している場合NavigationServiceを利用していて、Xamarin.Forms側と切り離して考えていのかまず悩みました
どうやったか
- Xamarin.FormsのNavigationPageを利用してオレオレNavigationPageを作る
- Pushed,Poppedを監視してイベント毎に適切なカラーを指定
App.xaml.cs
public partial class App : PrismApplication
{
protected override void OnInitialized()
{
InitializeComponent();
NavigationService.NavigateAsync("/RootPage/MyNavigationPage/MainPage");
}
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<RootPage>();
Container.RegisterTypeForNavigation<MyNavigationPage>();
Container.RegisterTypeForNavigation<MainPage>();
Container.RegisterTypeForNavigation<OtherPage>();
}
}
MyNavigationPage.xaml.cs
public partial class MyNavigationPage : NavigationPage
{
public MyNavigationPage()
{
InitializeComponent();
Pushed += (sender, e) => {
CheckBarBackColor();
};
Popped += (sender, e) =>
{
CheckBarBackColor();
};
}
void CheckBarBackColor()
{
if (CurrentPage is MainPage)
{
BarBackgroundColor = Color.Black;
}
else {
BarBackgroundColor = Color.Gray;
}
}
たったこれだけなのですが、NavigationPage.SetBackButtonTitle
とかNavigationPage.SetHasNavigationBar
とかあるので、外から指定するもんだと思い込み結構時間を使ってしまいました(SetBarBackgroundないけれどどうすりゃいいんだっていう)
気がついてしまえば、自分で自分の状態を確認して適切な処理をする至極当たり前なのですがこういう部分で躓いたりします
これが最適解ではないかもしれないのですが、ひとまずこれで実装は可能ということで
こうした方がかっこいいとか、こうするべきとかあれば知りたいのでよろしくおねがいします〜〜