LoginSignup
0
1

More than 5 years have passed since last update.

ページによってNavigationPageのバックグランドカラーを変更する

Posted at

ここ3ヶ月ほどXamarin + Prism.Formsで開発しているのですが、ページによってNavigationの背景色を変えたいというケースで躓きました

結論、Prismは全く関係ないのですが、Prism利用している場合NavigationServiceを利用していて、Xamarin.Forms側と切り離して考えていのかまず悩みました

どうやったか

  1. Xamarin.FormsのNavigationPageを利用してオレオレNavigationPageを作る
  2. 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;
            }
        }

a.png

b.png

たったこれだけなのですが、NavigationPage.SetBackButtonTitleとかNavigationPage.SetHasNavigationBarとかあるので、外から指定するもんだと思い込み結構時間を使ってしまいました(SetBarBackgroundないけれどどうすりゃいいんだっていう)
気がついてしまえば、自分で自分の状態を確認して適切な処理をする至極当たり前なのですがこういう部分で躓いたりします

これが最適解ではないかもしれないのですが、ひとまずこれで実装は可能ということで
こうした方がかっこいいとか、こうするべきとかあれば知りたいのでよろしくおねがいします〜〜

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1