MAUI 페이지 전환 관련...

AppShell을 이용하여 route를 지정하는 방식
Navigation.Push를 이용하여 추가하는 방식
App.Current.MainPage = new ContentPage() 이런식으로 세가지 방식이 있는게 맞을까요?
이 세가지에 대해서 어떻게 사용할 수 있는지 정리된 문서같은게 있을까요… 어느 상황에 써야할 지 감이 잘 안오네요…

여기까지는 메인질문이고 아래는 그냥 제가 하면서 못한걸 주저리 써논거라 읽기어려우실 수도 있어요.

그리고 현재 ContentPage와 TabbedPage를 섞어 써야할 상황이 있는거 같아서, 사용을 같이하니까 appshell에서는 tabbedpage는 받아줄 수 없다는 것 같고, 그래서 mainpage에 직접 담아주고 있는데 저렇게하면 뒤로가기 키가 안먹는 것 같고, navigation.push는 appshell에 미리 선언해주면 자기가 혼자 new page를 해서 새로운 루트를 다시 지정하는 것 같더라구요?
아니면 tabbedpage같이 contentpage를 여러개를 담아서 사용 할 수 있는 다른 컨트롤러라도 있으면 알려주시면 감사할 것 같습니다.

2 Likes

안녕하세요.
페이지에는

  • 단일페이지인 컨텐츠페이지
  • 화면전환을 위한 네비게이션페이지
  • 탭별 페이지를 구성하는 탭페이지
  • 상단메뉴를 통해 옆으로 나오는 플라이아웃페이지
  • 위 4가지 모두 동시에 사용할 수있는 것을 앱쉘입니다.

아래링크를 남겨드리니 원하시는 부분인지 한번 더 확인해보세요~


AppShell Customizing Library

기본 AppShell에서 이해가 안가신다면 조금 더 쉽게 사용할 수 있는
SimpleToolkit의 Appshell 공유드립니다.


결론

성능 (AppShell vs TabbedPage)

TabbedPage에서 각 Page 개체는 TabbedPage가 생성될 때 만들어집니다. 이로 인해 특히 앱의 루트 페이지인 경우 사용자 환경이 TabbedPage 저하 될 수 있습니다. 그러나 .NET MAUI Shell을 사용하면 탐색에 대한 응답으로 필요에 따라 탭 표시줄을 통해 액세스되는 페이지를 만들 수 있습니다. Shell 앱에 대한 자세한 내용은 Shell을 참조하세요.

출처: TabbedPage - .NET MAUI | Microsoft Learn

특징(AppShell vs TabbedPage)

AppShell의 경우 모든 페이지들 AppShell 미리 사용할것을 정리하고 Route설정으로 화면 페이지를 비즈니스 로직 이후에 argu와 함께 자유롭게 이동할 수 있었습니다.

TabbedPage에서 ContentPage를 혼용해서 사용한다고 하셨기때문에 MainPage를 ContentPage-> TabbedPage로 변경하였습니다.
AppShell의 별다른 설정을 하지 않아도 되었기 때문에 쉽게 접근할 수 있었습니다.

Navigation.PushAsync (AppShell vs TabbedPage)

이 두개의 차이점에서 보였던 것은 하단탭이 보이느냐 안보이느냐의 차이였습니다.
이로 인해
AppShell에서 Bpage 이동했을경우엔 Bpage가 보이고 다시 Apage 이동했을땐 Cpage였습니다.

Tabplace 변경 (AppShell vs TabbedPage)

AppShell의 경우 기본적으로 하단의 위치하기 때문에 문제없으나 TabbedPage의 경우엔
별도로 설정을 해줘야합니다.

Andorid

4 Likes