페이지별로 NavigationPage의 배경색 변경

5162 단어 Xamarin.Forms
지난 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 없지만 어떻게 하면 좋다고 한다)
    깨달아 버리면, 스스로 자신의 상태를 확인해 적절한 처리를 하는 지극히 당연합니다만 이런 부분에서 망설이거나 합니다

    이것이 최적 해가 아닐지도 모르지만, 일단 이것으로 구현은 가능하다는 것으로
    이런 쪽이 멋지다든가, 이렇게 해야 한다든가 있으면 알고 싶어서 잘 부탁드립니다~~

    좋은 웹페이지 즐겨찾기