λλμ΄ .NET
MAUI
μ RC λ²μ μ΄ λμμ΅λλ€.
μ΄μ μλ μμλμ§λ λͺ¨λ₯΄κ² μΌλ, μ μ΄λ μ κ° MAUI λ°νμ€λΉλ₯Ό νμλ 1μκΉμ§λ μμλ Shell
μ΄λΌλ κ°λ
μ΄ λ±μ₯νμμ΅λλ€.
μ΄ Shellμ Xamarin
μ μ΅μν λΆλ€μ΄λΌλ©΄ μ‘°κΈ λ―μ κ°λ
μΌν
λ° μ΄ κΈ°λ₯μ΄ λ¬΄μμ νλμ§μ λν΄ μ κΉ μμλ΄
λλ€.
μ΄ κΈμ μ κ° κ°μΈμ μΌλ‘ μ΄ν΄ν κ²μ λ°λ₯΄λ―λ‘, μλͺ»λ λ΄μ©μ΄ μμΌλ©΄ μμ λ‘κ² νΌλλ°± λΆνλ립λλ€.
λ¨Όμ Shellμ MSDNμ μ€λͺ μ΄ μμΈν λμμμΌλ μ¬μ€ μ½μ΄λ΄λ κ°λ μ΄ μ μλΏμ§ μμ΅λλ€.
νμ§λ§ λ΄μ©μ λ°νμΌλ‘ μ‘°κΈ μκ°ν΄λ³΄λ©΄ νλ‘κ·Έλ¨μ UIμ ν΄λΉν μ μλ κ°μ₯ μμͺ½μ Shellμ΄λΌλ κ°λ μ μ μ©νμ¬ κ·Έ μμμ νμ΄μ§λ₯Ό μμ λ‘κ² μ΄λν μ μλ κ²μ μλκΉ ν©λλ€.
μΌλ¨ κΈ°λ³Έμ μΈ κ΅¬μ±μ FlyoutItem
, TabItem
, ShellContent
3κ°μ§κ° μμ΅λλ€.
μμ λ κ°λ UI κ΅¬μ± λ°©λ²μ Flyout λ°©μμ΄λ Tab λ°©μμ΄λλ₯Ό λνλΌ λΏμ΄κ³ , μ΄ μ€ μ€μ νλ©΄μ νννλ κ²μ ShellContent
μ
λλ€.
(TabItem
μ Xamarin
μ TabbedPage
μ λΉμ·νμ§λ§ μλμͺ½μ λμ€λ Route
λΆλΆκ³Ό μ°¨μ΄κ° μμ΅λλ€.)
FlyoutItem
<Shell
x:Class="MyTest.Maui.AppShell"
...>
<FlyoutItem Title="Cats">
<Tab>
<ShellContent ContentTemplate="{DataTemplate views:CatsPage}"
Route="CatsPage"/>
</Tab>
</FlyoutItem>
</Shell>
TabItem
<Shell
x:Class="MyTest.Maui.AppShell"
...>
<TabBar>
<Tab>
<ShellContent ContentTemplate="{DataTemplate views:DogsPage}"
Route="DogsPage" />
</Tab>
</TabBar>
</Shell>
ShellContent
<Shell
x:Class="MyTest.Maui.AppShell"
...
Shell.FlyoutBehavior="Disabled">
<ShellContent
Title="Hello, World!"
ContentTemplate="{DataTemplate local:MyCustomPage}"
Route="MyCustomPage" />
</Shell>
μ½λλ‘ λ³΄λ©΄ μ΄λ κ² μκ²Όλλ° κ°μ΄λ° μλ <Tab />
νκ·Έλ μλ΅μ΄ κ°λ₯ν©λλ€.
λν μ΄λ₯Ό μλμ κ°μ΄ μμ΄μ μΈ μλ μμ΅λλ€.
<Shell
x:Class="MyTest.Maui.AppShell"
...>
<FlyoutItem Title="Animals" Route="Animals">
<Tab>
<ShellContent ContentTemplate="{DataTemplate views:CatsPage}"
Route="CatsPage"/>
<ShellContent ContentTemplate="{DataTemplate views:DogsPage}"
Route="DogsPage"/>
</Tab>
</FlyoutItem>
<ShellContent
Title="Hello, World!"
ContentTemplate="{DataTemplate local:MyCustomPage}"
Route="MyCustomPage" />
</Shell>
μ¬κΈ°μ ν΅μ¬μ Route
ν€μλμ
λλ€.
Route
λ λ£¨νΈ νμ΄μ§λ₯Ό μ΄λνλ κ°μ₯ μ¬μ΄ λ°©λ²μ
λλ€.
κΈ°μ‘΄ Xamarinμμλ λ£¨νΈ νμ΄μ§κ° μλ μ½λμ²λΌ κ³ μ λμ΄ μμ΄ μ½κ² λ°κΏ μ μμμ΅λλ€.
// κΈ°μ‘΄ Xamarin
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
}
// MAUI
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new AppShell();
}
}
κ·Έλ¬λ μ¬κΈ° Shell
μ μ΄μ©νλ©΄ λ£¨νΈ νμ΄μ§λ₯Ό κ΅μ₯ν μ½κ² λ°κΏ μ μμ΅λλ€.
μ΄λ Route
λ κ·Έ κ²½λ‘κ° λλ©° μ΄λ₯Ό Uri
μμΌλ‘ μ¬μ©ν©λλ€.
μλ₯Όλ€μ΄ μ μμ μμλ κ³μΈ΅λκ° μλμ κ°μ΄ λ©λλ€.
Animals
CatsPage
DogsPage
MyCustomPage
μ΄λ₯Ό Uriλ‘ λ°κΎΈλ©΄ λ€μκ³Ό κ°μ΅λλ€.
//Animals
//Animals/CatsPage
//Animals/DogsPage
//MyCustomPage
κ° νμ΄μ§μ μ΄λμ Uri
λ₯Ό ν΅ν΄ μ΄λ€μ§λλ€.
νμ΄μ§μ μ΄λμ λΉνμΈλ μ½λμμ μλ ν¨μλ₯Ό μ΄μ©νλ©΄ λ©λλ€.
await (Application.Current.MainView as Shell).Current.GoToAsync("//MyCustomPage");
// λλ
await Shell.Current.GoToAsync("//MyCustomPage");
μμμ μ¬μ©ν /
κΈ°νΈλ Uri
λ¨μμ§λ§ 맨 μμ λΆμΌλ©΄ κΈ°μ€μ μ΄ λ¬μμ§λλ°,
μ΄λ λ¬Έμλ₯Ό μ½μ΄λ(μμ΄λ λ§μ°¬κ°μ§) μμ§ μ ννκ² μ΄ν΄νμ§λ λͺ»νμ΅λλ€.
λ€λ§ μ λ κ²½λ‘κ° //
λ‘ μμνλ€λ κ²λ§ νμ
νλ€μ.
μ΄λ‘μ¨ λ£¨νΈ νμ΄μ§λ₯Ό μ΄λν λ€μ λ΄λΆμμλ Xamarinμ²λΌ await Navigation.PushAsync(new NextPage())
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ΄ κ²½μ° μλμΌλ‘ NavigationPage
ννλ‘ νλ¨νμ¬ μλ κ·Έλ¦Όκ³Ό κ°μ΄ λ€λ‘κ°κΈ° μμ΄μ½μ΄ μλ λ°κ° μκΉλλ€.
λ§λ¬΄λ¦¬
μ 리νμλ©΄ MAUIμ μλ‘ μκΈ΄ Shell
μ λ£¨νΈ νμ΄μ§ λ³κ²½ λ° μΌλ°μ μΈ νμ΄μ§ μ΄λμΌλ‘ μ¬μ©ν μ μμΌλ©° κ²½λ‘λ Uri
νμμ μ¬μ©νκ³ κ·Έ μμΉλ Shell
μ μ μλ Depthλ₯Ό λ°λ¦
λλ€.
λ¬Όλ‘ κΈ°μ‘΄ Xamarinκ³Ό κ°μ΄ νμ΄μ§λ₯Ό μ΄λνλ κ²λ κ°λ₯ν©λλ€.
μ΄λ‘μ¨ μ κ° μ΄ν΄ν λ°λ‘λ κΈ°μ‘΄μ App
ν΄λμ€ λ΄λΆμ MainView
κ° κ°νκ² μ°κ²°λμ΄ μλ κ²μ λμ¨νκ² κ²°ν©ν μ μλλ‘ νλ‘κ·Έλλ° μ μΌλ‘ ν΄μν κ²μΌλ‘ 보μ΄λ©°, μ΄λ λ€μν μλ리μ€μμ μ¬μ©μ΄ κ°λ₯ν κ² κ°μ΅λλ€.