์๋ก์ด ๊ฐ๋ฐ์๊ฐ ์ ์ ํ ๊ตฌ์ฑ๊ณผ ์ฌ๋ฐ๋ฅธ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ํ์ ๋ ธ๋ ฅ๊ณผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ข์ ์ฌ๋์ด ๋๋ ๋ช ํํ ๊ฒฝ๋ก๋ฅผ ํตํด ์์ ํ ์ฑ ๊ฒฝํ์ ์ป์ ์ ์๋๋ก ๊ฐ๋จํ๊ณ ๊ฐ๋จํ๊ฒ ๋ง๋์ญ์์ค.
Shell์ ํน์ ์ง์ ์์ ๋ ๋จ์ ์ธ API์ด๋ฉฐ, ์คํ ํ๋ซํผ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ์ผ๋ถ .Default๋ก ๋ชจ๋ ๊ฐ์ ํญ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ์ง๋ ์์ต๋๋ค. ๋์ ํ๋ซํผ ๊ธฐ๋ณธ๊ฐ์ ๊ด๊ณ์์ด ๋ชจ๋ ํ๋ซํผ์์ ์กด์ค๋๋ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ๋๋ฉด ์ฌ์์ด #2452๋ก ์ด๋ํ์ต๋๋ค.
์คํฌ๋ฆฐ์ท์ด ํ์ํฉ๋๋ค...
์ฒ์์๋ Shell ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ฒ์์๋ ์๋์ ์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค. ๋ณต์กํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ฉฐ ํ๋ถํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ์์ฉ๊ตฌ xaml์ ์์ ์ต์ํํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
๋ฐ๋ผ์ ์ ธ์ ์ฒ์ ๋ฐฐ์ธ ๋ ๋ฐ๋ก ๊ฐ๊ธฐ ์์ด ๋จผ์ ํ์ตํ ๋ค์ ๋ฐ๋ก ๊ฐ๊ธฐ๋ฅผ ๋์ ํ์ฌ ์์ฑ๋๋ XAML์ ์์ ์ฝ๊ฒ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฝ์ต๋๋ค.
๋ค๋ฐ๋ฅด๋ ๋ชจ๋ ์ํ์ ์ฌ์์ ๋ค๋ฅธ ๊ณณ์์ ๋ ผ์๋๋ ํ ํ๋ฆฟํ๋ ShellContent๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ContentTemplate๊ณผ ํจ๊ป ShellContents๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์์ ์ ๋ชจ๋ ํ์ด์ง๊ฐ ๋ก๋๋์ด ์์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด ์ํ์ ํ์ต์ฉ์ ๋๋ค.
๋คํํ ContentTemplates์ ํจ๊ป ShellContents๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๊ฒฐํฉ๋๋ค.
์ด๋ฌํ ์ํ ์ค ์๋น์๋ ๋ถํ์ํ๊ฒ ๋ณต์กํด ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๋ณต์กํฉ๋๋ค. ๋ค์ ์น์ ์์๋ ์ด๊ฒ๋ค์ด ๋จ์ํ๋ ๊ฒ์ ๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
FlyoutBehavior="Disabled"
x:Class="MyStore.Shell">
<ShellItem>
<ShellSection>
<ShellContent>
<local:HomePage />
</ShellContent>
</ShellSection>
</ShellItem>
</Shell>
MainPage์์ Shell.NavBarVisible="false"
๋ฅผ ์ค์ ํ์ฌ ์๋จ ํ์์ค์ ์์ ํ ์จ๊ธธ ์ ์์ต๋๋ค. ๋ํ ํ๋ผ์ด์์์ ์ด ๋ชจ๋์์ ๋ค์ ํฌ๋ฐํด ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ด ์ํ์์๋ ๋นํ์ฑํ๋์ด ์์ต๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
FlyoutBehavior="Disabled"
x:Class="MyStore.Shell">
<ShellItem>
<ShellSection Title="Home" Icon="home.png">
<ShellContent>
<local:HomePage />
</ShellContent>
</ShellSection>
<ShellSection Title="Notifications" Icon="bell.png">
<ShellContent>
<local:NotificationsPage />
</ShellContent>
</ShellSection>
</ShellItem>
</Shell>
ShellSection
์น์
์ ShellItem
์ถ๊ฐํ๋ฉด ๋ ๋ค๋ฅธ ํ๋จ ํญ์ด ๋ํ๋ฉ๋๋ค. ์ ์ ํ ์ ๋ชฉ๊ณผ ์์ด์ฝ์ ์ค์ ํ๋ฉด ํญ ํญ๋ชฉ ์ ๋ชฉ๊ณผ ์์ด์ฝ์ ์ ์ดํ ์ ์์ต๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
FlyoutBehavior="Disabled"
x:Class="MyStore.Shell">
<ShellItem>
<ShellSection Title="Home" Icon="home.png">
<ShellContent>
<local:HomePage />
</ShellContent>
</ShellSection>
<ShellSection Title="Notifications" Icon="bell.png">
<ShellContent Title="Recent">
<local:NotificationsPage />
</ShellContent>
<ShellContent Title="Alert Settings">
<local:SettingsPage />
</ShellContent>
</ShellSection>
</ShellItem>
</Shell>
๊ฐ์ฐํจ์ผ๋ก์จ ์ ShellContent
๋ก ShellSection
์๋ถ ํญ ๋ง๋๋ฅผ ์ฒจ๊ฐํ๊ณ ์๋์ชฝ ํ์ด์ง๋ ํญ์ด ์ ํ ๋ ๋ ์ฌ์ด์ ๋์นญ๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.Shell">
<Shell.FlyoutHeader>
<local:FlyoutHeader />
</Shell.FlyoutHeader>
<ShellItem Title="Home" Icon="home.png">
<ShellSection>
<ShellContent>
<local:HomePage />
</ShellContent>
</ShellSection>
</ShellItem>
<ShellItem Title="Notifications" Icon="bell.png">
<ShellSection>
<ShellContent>
<local:NotificationsPage />
</ShellContent>
</ShellSection>
</ShellItem>
</Shell>
์ด ์ํ์์ ํ๋ผ์ด์์์ด ๋ค์ ํ์ฑํ๋ฉ๋๋ค. ์ฌ๊ธฐ์์ ์ฌ์ฉ์๋ ํ๋ผ์ด์์์ ์ค๊ฐ์๋ก ์ฌ์ฉํ์ฌ ๋ ํ์ด์ง ์ฌ์ด๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ๋ณด๊ธฐ ์ข๊ฒ ํค๋๋ ์ถ๊ฐ๋์์ต๋๋ค.
์ด์ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ชจ๋ ์์ค์ด ํ์๋๊ณ ๊ฐ๋ตํ๊ฒ ์ค๋ช
๋์์ผ๋ฏ๋ก ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ์ํ ๋ ํ์ํ์ง ์์ ๋๋ถ๋ถ์ ๋ํ์ ์๋ตํ ์ ์์ต๋๋ค. Shell
์ค์ง ํฌํจ ShellItem
์ค์ง ํฌํจ S ShellSection
์ฐจ๋ก๋ก ์ค์ง ํฌํจ S ShellContent
๋ค. ๊ทธ๋ฌ๋ ์๋ ์
๋ํ์ ํ์ฉํ๋ ์์์ ๋ณํ ์ฐ์ฐ์๊ฐ ์์ต๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
FlyoutBehavior="Disabled"
x:Class="MyStore.Shell">
<local:HomePage />
</Shell>
์์์ ๋ํ์ ์ฌ์ฉํ๋ฉด ํ์ด์ง๊ฐ ShellItem
๊น์ง ์๋์ผ๋ก ๋ํ๋ฉ๋๋ค. ๋ชจ๋ ์ค๊ฐ ๋ ์ด์ด๋ฅผ ์์ฑํ ํ์๋ ์์ต๋๋ค. Title
๋ฐ Icon
์ผ๋ก๋ถํฐ Page
์ด๋ค ์์ ์ ์ผ๋ก ์์ฑ ๋ ๋ถ๋ชจ๊น์ง ๊ฒฐํฉ๋ฉ๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
FlyoutBehavior="Disabled"
x:Class="MyStore.Shell">
<ShellItem>
<local:HomePage Icon="home.png" />
<local:NotificationsPage Icon="bell.png" />
</ShellItem>
</Shell>
์ด์ ํ์ด์ง๊ฐ ์์์ ์ผ๋ก ShellContent ๋ฐ ์์ฒด ShellSection์ผ๋ก ๋ํ๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๊ฐ์ ๋ค๋ฅธ ํญ์ด ์์ฑ๋ฉ๋๋ค.
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
FlyoutBehavior="Disabled"
x:Class="MyStore.Shell">
<ShellItem>
<local:HomePage Icon="home.png" />
<ShellSection Title="Notifications" Icon="bell.png">
<local:NotificationsPage />
<local:SettingsPage />
</ShellSection>
</ShellItem>
</Shell>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.Shell">
<Shell.FlyoutHeader>
<local:FlyoutHeader />
</Shell.FlyoutHeader>
<local:HomePage Icon="home.png" />
<local:NotificationsPage Icon="bell.png" />
</Shell>
์ฌ๊ธฐ์ ์์์ ๋ํ์ ์ ธ ํญ๋ชฉ๊น์ง ์งํ๋๋ฏ๋ก ์ค์ค๋ก ๋ํํ ํ์๊ฐ ์์ต๋๋ค.
๋ชจ๋ ํ์์ View์ .Navigation ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ํธ์๋ ํ์๋ ํ์ฌ ShellSection์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด๊ฒ์ ํธ์ ์ด๋ฒคํธ์์ ์๋จ ํญ์ด ์ฌ๋ผ์ง๊ณ ํ๋จ ํญ์ด ๋จ์ ์์์ ์๋ฏธํฉ๋๋ค.
์์์ ์ค๋ช ํ ๋๋ก ํ์ค ํ์ ์์ฑ์ ์ฌ์ฉํ์ฌ ์ ธ์ ํ์ํ ์ ์์ง๋ง ์ ธ์ ํจ์ฌ ๋ ํธ๋ฆฌํ ํ์ ๋ฉ์ปค๋์ฆ์ ๋์ ํฉ๋๋ค.
ํ์ URI์ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
[Shell.RouteScheme]://[Shell.RouteHost]/[Shell]/[ShellItem]/[ShellSection]/[ShellContent]/[NavStack1]/[NavStack2]...
์ ธ ๊ณ์ธต์ ๋ชจ๋ ํญ๋ชฉ์๋ ์ฐ๊ฒฐ๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ๋ฐํ์์ ๊ฒฝ๋ก๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ฐํ์ ์์ฑ ๊ฒฝ๋ก๋ ์ฑ์ ์ฌ๋ฌ ์คํ์์ ์์ ์ ์ด๋ผ๊ณ ๋ณด์ฅ๋์ง ์์ผ๋ฏ๋ก ๋ฅ ๋งํฌ์ ์ ์ฉํ์ง ์์ต๋๋ค.
Shell์ ๊ธฐ๋ณธ ์ปจํธ๋กค์ ์ฌ์ฉํ ํ์๊ฐ ์๋ ๋ถ๋ฌ์ด ์์น์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํํ์ ๋ค๋ก ๋ฒํผ ์ฌ์ ์๊ฐ ์ง์๋ ์ ์๊ณ ์ง์๋์ด์ผ ํฉ๋๋ค.
๋ค๋ก ๋ฒํผ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ค์ ๊ธฐ๋ฅ์ ์ง์ํด์ผ ํฉ๋๋ค.
API๋ ์ฌ์ฉ ํธ์์ฑ์ ์ํด ํ์ด์ง ์์ค์ผ๋ก ์ธ๋ถํ๋์ด์ผ ํ์ง๋ง ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์์ค์์ ์คํ ์๋ก ์ถ๊ฐ๋ก ์ฒ๋ฆฌํ ์ ์์ด์ผ ํฉ๋๋ค.
<Shell>
<Shell.FlyoutHeaderTemplate>
<DataTemplate>
<Grid>
<Label Text="{x:Bind HeaderText}" />
</Grid>
</DataTemplate>
</Shell.FlyoutHeaderTemplate>
// Flyout Item 1
<ShellItem Title="My music" ItemsSource="{x:Bind MyMusicModels}" TabLocation="Bottom">
<ShellItem.ItemTemplate>
<local:MyMusicItemTemplateSelection />
</ShellItem.ItemTemplate>
</ShellItem>
// Flyout Item 2
<ShellItem Title="Home" Icon="home.png" GroupBehavior="ShowTabs">
<ShellContent Title="My Friends">
<local:FriendsPage />
</ShellContent>
<local:FeedPage />
<local:ProfilePage />
</ShellItem>
// Flyout Item 3
<local:SettingsPage />
// Flyout Item 4
<MenuItem Text="Log Out" Command="{x:Bind LogOutCommand}" />
</Shell>
<Shell FlyoutVisibility="Disabled">
<local:MyPage />
</Shell>
<Shell FlyoutVisibility="Disabled">
<ShellItem>
<local:MyPage />
<local:MySecondPage />
<local:MyThirdPage />
</ShellItem>
</Shell>
<Shell FlyoutVisibility="Disabled">
<local:MyPage />
<local:MySecondPage />
<local:MyThirdPage />
</Shell>
<Shell FlyoutVisibility="Disabled">
<local:MyPage />
</Shell>
```์คํ
๊ณต๊ฐ ํด๋์ค MyPage : ContentPage
{
๊ณต๊ฐ ํด๋์ค MyPageSearchHandler : SearchHandler
{
๊ณต๊ฐ MyPageHandler()
{
SearchBoxVisibility = SearchBoxVisibility.Collapsed;
IsSearchEnabled = true;
์๋ฆฌ ํ์์ = "๋๋ฅผ ๊ฒ์ํ์ธ์!";
}
protected override async void OnSearchConfirmed (string query)
{
IsSearching = true;
await PerformSearch (query);
UpdateResults ();
IsSearching = false;
}
protected override void OnSearchChanged (string oldValue, string newValue)
{
// Do nothing, we will wait for confirmation
}
}
๊ณต๊ฐ ๋ง์ดํ์ด์ง()
{
Shell.SetSearchHandler(์ด๊ฒ์ ์๋ก์ด MyPageSearchHandler());
}
}
## API Definition
### Shell
This is the base class for Shell's. It defines a somewhat strict navigational model however all shells must adhere to it in general. It does not include any theming or design language specific features.
```csharp
[ContentProperty("Items")]
public class Shell : Page, IShellController
{
// Attached Properties
public static readonly BindableProperty BackButtonBehaviorProperty;
public static readonly BindableProperty FlyoutBehaviorProperty;
public static readonly BindableProperty NavBarVisibleProperty;
public static readonly BindableProperty SearchHandlerProperty;
public static readonly BindableProperty SetPaddingInsetsProperty;
public static readonly BindableProperty TabBarVisibleProperty;
public static readonly BindableProperty TitleViewProperty;
public static readonly BindableProperty ShellBackgroundColorProperty;
public static readonly BindableProperty ShellDisabledColorProperty;
public static readonly BindableProperty ShellForegroundColorProperty;
public static readonly BindableProperty ShellTabBarBackgroundColorProperty;
public static readonly BindableProperty ShellTabBarDisabledColorProperty;
public static readonly BindableProperty ShellTabBarForegroundColorProperty;
public static readonly BindableProperty ShellTabBarTitleColorProperty;
public static readonly BindableProperty ShellTabBarUnselectedColorProperty;
public static readonly BindableProperty ShellTitleColorProperty;
public static readonly BindableProperty ShellUnselectedColorProperty;
public static BackButtonBehavior GetBackButtonBehavior(BindableObject obj);
public static FlyoutBehavior GetFlyoutBehavior(BindableObject obj);
public static bool GetNavBarVisible(BindableObject obj);
public static SearchHandler GetSearchHandler(BindableObject obj);
public static bool GetSetPaddingInsets(BindableObject obj);
public static bool GetTabBarVisible(BindableObject obj);
public static View GetTitleView(BindableObject obj);
public static void SetBackButtonBehavior(BindableObject obj, BackButtonBehavior behavior);
public static void SetFlyoutBehavior(BindableObject obj, FlyoutBehavior value);
public static void SetNavBarVisible(BindableObject obj, bool value);
public static void SetSearchHandler(BindableObject obj, SearchHandler handler);
public static void SetSetPaddingInsets(BindableObject obj, bool value);
public static void SetTabBarVisible(BindableObject obj, bool value);
public static void SetTitleView(BindableObject obj, View value);
public static Color GetShellBackgroundColor(BindableObject obj);
public static Color GetShellDisabledColor(BindableObject obj);
public static Color GetShellForegroundColor(BindableObject obj);
public static Color GetShellTabBarBackgroundColor(BindableObject obj);
public static Color GetShellTabBarDisabledColor(BindableObject obj);
public static Color GetShellTabBarForegroundColor(BindableObject obj);
public static Color GetShellTabBarTitleColor(BindableObject obj);
public static Color GetShellTabBarUnselectedColor(BindableObject obj);
public static Color GetShellTitleColor(BindableObject obj);
public static Color GetShellUnselectedColor(BindableObject obj);
public static void SetShellBackgroundColor(BindableObject obj, Color value);
public static void SetShellDisabledColor(BindableObject obj, Color value);
public static void SetShellForegroundColor(BindableObject obj, Color value);
public static void SetShellTabBarBackgroundColor(BindableObject obj, Color value);
public static void SetShellTabBarDisabledColor(BindableObject obj, Color value);
public static void SetShellTabBarForegroundColor(BindableObject obj, Color value);
public static void SetShellTabBarTitleColor(BindableObject obj, Color value);
public static void SetShellTabBarUnselectedColor(BindableObject obj, Color value);
public static void SetShellTitleColor(BindableObject obj, Color value);
public static void SetShellUnselectedColor(BindableObject obj, Color value);
// Bindable Properties
public static readonly BindableProperty CurrentItemProperty;
public static readonly BindableProperty CurrentStateProperty;
public static readonly BindableProperty FlyoutBackgroundColorProperty;
public static readonly BindableProperty FlyoutHeaderBehaviorProperty;
public static readonly BindableProperty FlyoutHeaderProperty;
public static readonly BindableProperty FlyoutHeaderTemplateProperty;
public static readonly BindableProperty FlyoutIsPresentedProperty;
public static readonly BindableProperty GroupHeaderTemplateProperty;
public static readonly BindableProperty ItemsProperty;
public static readonly BindableProperty ItemTemplateProperty;
public static readonly BindableProperty MenuItemsProperty;
public static readonly BindableProperty MenuItemTemplateProperty;
public Shell();
public event EventHandler<ShellNavigatedEventArgs> Navigated;
public event EventHandler<ShellNavigatingEventArgs> Navigating;
public ShellItem CurrentItem {get; set;}
public ShellNavigationState CurrentState {get; }
public Color FlyoutBackgroundColor {get; set;}
public FlyoutBehavior FlyoutBehavior {get; set;}
public object FlyoutHeader {get; set;}
public FlyoutHeaderBehavior FlyoutHeaderBehavior {get; set;}
public DataTemplate FlyoutHeaderTemplate {get; set;}
public bool FlyoutIsPresented {get; set;}
public DataTemplate GroupHeaderTemplate {get; set;}
public ShellItemCollection Items {get; }
public DataTemplate ItemTemplate {get; set;}
public MenuItemCollection MenuItems {get; }
public DataTemplate MenuItemTemplate {get; set;}
public string Route {get; set;}
public string RouteHost { get; set; }
public string RouteScheme { get; set; }
public async Task GoToAsync(ShellNavigationState state, bool animate = true);
protected virtual void OnNavigated(ShellNavigatedEventArgs args);
protected virtual void OnNavigating(ShellNavigatingEventArgs args);
}
์ฒจ๋ถ๋ ์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ๊ฒ์ ํธ๋ค๋ฌ ์์ฑ | ํ์ด์ง ์์ค ๊ฒ์ ๊ธฐ๋ฅ์ ์ ์์ ๋ํ ์ฐ๊ฒฐ๋ ์์ฑ์
๋๋ค. ๊ณ์ธต ๊ตฌ์กฐ์ ์ฌ๋ฌ ์ง์ ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ ์๋ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. https://material.io/guidelines/patterns/search.html#search -in-app-search |
| BackButton๋์ | ๋ค๋ก ๋ฒํผ์ด ์๋ํ๋ ๋ฐฉ์์ ์์ ํ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ํ๋ฉด ๋ฐ ๋ฌผ๋ฆฌ์ ๋ค๋ก ๋ฒํผ์ ์ ์ฉ๋ฉ๋๋ค. |
| ํ๋ผ์ด์์ ๋์ | ํ๋ผ์ด์์์ด ํ์๋๋ ๋ฐฉ์์ ์ ์ํฉ๋๋ค. ์ด๊ฒ์ ShellItem
s, ShellContent
s ๋๋ Page
s์ ์ฐ๊ฒฐํ์ฌ ๊ธฐ๋ณธ ๋์์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. |
| NavBarVisibleProperty | NavBar๊ฐ ํ์๋ ๋ ํ์๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ํ๊ธฐ ์ํด Page
์ ์์ฑ ์ค์ |
| SetPaddingInsetsProperty | Page
์ ์ด ์์ฑ์ ์ค์ ํ๋ฉด Padding
๊ฐ ์ค์ ๋์ด ํด๋น ์ฝํ
์ธ ๊ฐ Shell ํฌ๋กฌ ์๋์์ ํ๋ฅด์ง ์๋๋ก ํฉ๋๋ค. |
| TabBarVisibleProperty | TabBar๊ฐ ํ์๋ ๋ ํ์๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ํ๊ธฐ ์ํด Page
์ ์์ฑ ์ค์ |
| TitleView ์์ฑ | ์ ์์ฑ ํ ์ธํธ์
๋๋ค Page
์ ์ ํ ์์๋ TitleView
|
| ShellBackgroundColor ์์ฑ | ์
ธ์ ํฌ๋กฌ ์์์ ์ฌ์ฉํด์ผ ํ๋ ๋ฐฐ๊ฒฝ์์ ์ค๋ช
ํฉ๋๋ค. ์ด ์์์ ์
ธ ๋ด์ฉ ๋ค์ ์ฑ์์ง์ง ์์ต๋๋ค. |
| ShellDisabledColorProperty | ๋นํ์ฑํ๋ ํ
์คํธ/์์ด์ฝ์ ์์ ์ฒ๋ฆฌํ ์์ |
| ShellForegroundColor ์์ฑ | ์์ ์ผ๋ฐ ํ
์คํธ/์์ด์ฝ ์์ ์ฒ๋ฆฌ ์์ |
| ShellTabBarBackgroundColorProperty | TabBar์ ๋ํ ShellBackgroudnColor ์ฌ์ ์. ์ค์ ํ์ง ์์ผ๋ฉด ShellBackgroundColor๊ฐ ์ฌ์ฉ๋ฉ๋๋ค |
| ShellTabBarDisabledColorProperty | TabBar์ ๋ํ ShellDisabledColor ์ฌ์ ์. ์ค์ ํ์ง ์์ผ๋ฉด ShellDisabledColorProperty๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
| ShellTabBarForegroundColorProperty | TabBar์ ๋ํ ShellForegroundColorProperty ์ฌ์ ์. ์ค์ ํ์ง ์์ผ๋ฉด ShellForegroundColorProperty๊ฐ ์ฌ์ฉ๋ฉ๋๋ค |
| ShellTabBarTitleColorProperty | TabBar์ ๋ํ ShellTitleColorProperty ์ฌ์ ์. ์ค์ ํ์ง ์์ผ๋ฉด ShellTitleColorProperty๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
| ShellTabBarUnselectedColorProperty | TabBar์ ๋ํ ShellUnselectedColorProperty ์ฌ์ ์. ์ค์ ํ์ง ์์ผ๋ฉด ShellUnselectedColorProperty๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
| ShellTitleColor ์์ฑ | ํ์ฌ ํ์ด์ง์ ์ ๋ชฉ์ ์ฌ์ฉ๋ ์์ |
| ShellUnselectedColorProperty | ์
ธ์์ ์ ํ๋์ง ์์ ํ
์คํธ/์์ด์ฝ์ ์ฌ์ฉ๋๋ ์์ chrome |
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ์ฌ ํญ๋ชฉ | ํ์ฌ ์ ํ๋ ShellItem |
| ํ์ฌ ์ํ | ์
ธ์ ํ์ฌ ํ์ ์ํ์
๋๋ค. ์ด ์ํ๋ฅผ GoToAsync์ ๋ค์ ์ ๋ฌํ๋ฉด ์
ธ์ด ๋ค๋ก ํ์ ์ํ๋ก ๋์๊ฐ๋๋ค. |
| FlyoutBackgroundColorProperty | ํ๋ผ์ด์์ ๋ฉ๋ด์ ๋ฐฐ๊ฒฝ์ |
| ํ๋ผ์ด์์ ๋์ | ๊ธฐ๋ณธ ์ค์ FlyoutBehavior
์ ๋ํ Shell
. |
| ํ๋ผ์ด์์ํค๋ | ํ๋ผ์ด์์์ ํค๋๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด์
๋๋ค. FlyoutHeaderTemplate
๊ฐ null์ด ์๋๋ฉด BindingContext
๋ก ํฝ์ฐฝ๋ ๊ฐ์ฒด์ ์ ๋ฌ๋ฉ๋๋ค. FlyoutHeaderTemplate
๊ฐ null์ด๊ณ FlyoutHeader
๊ฐ View
์ ํ์ด๋ฉด ์ง์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ToString()์ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ์ฌ ํ์๋ฉ๋๋ค. |
| ํ๋ผ์ด์์ํค๋๋์ | ๋ด์ฉ์ ํ์ํ๊ธฐ ์ํด ํ๋ผ์ด์์์ ์คํฌ๋กคํด์ผ ํ ๋ FlyoutHeader
์ ๋์์ ์ค์ ํฉ๋๋ค. |
| ํ๋ผ์ด์์ ํค๋ ํ
ํ๋ฆฟ | ํ๋ผ์ด์์์ ํค๋๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํ
ํ๋ฆฟ์
๋๋ค. |
| ํ๋ผ์ด์์์ด ์ ์๋จ | ํ๋ผ์ด์์์ด ํ์ฌ ํ์๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํฉ๋๋ค. |
| ๊ทธ๋ฃน ํค๋ ํ
ํ๋ฆฟ | ShellItem
๊ฐ ํ๋ผ์ด์์์์ ํญ ๊ทธ๋ฃน์ผ๋ก ํ์๋๋๋ก ์์ฒญํ๋ ๊ฒฝ์ฐ DataTemplate
๊ทธ๋ฃน ํค๋๋ฅผ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. null์ด๋ฉด ํค๋๊ฐ ํ์๋์ง ์์ต๋๋ค. |
| ํญ๋ชฉ | ์
ธ์ ๊ธฐ๋ณธ ์ฝํ
์ธ ์
๋๋ค. ํญ๋ชฉ์ ํ๋ผ์ด์์์ ํ์ํ ํญ๋ชฉ ๋ชฉ๋ก๊ณผ ์ฌ์ด๋๋ฐ ํญ๋ชฉ์ ์ ํํ ๋ ํ์๋ ์ฝํ
์ธ ๋ฅผ ์ ์ํฉ๋๋ค. |
| ํญ๋ชฉ ํ
ํ๋ฆฟ | DataTemplate
ํ๋ผ์ด์์์์ Items
์ปฌ๋ ์
์ ํญ๋ชฉ์ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ํ๋ผ์ด์์์์ ์๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. |
| ๋ฉ๋ด ํญ๋ชฉ | ์์ฒด ์น์
์ ํ๋ผ์ด์์์ ํ์๋ MenuItem
์ปฌ๋ ์
์
๋๋ค. |
| ๋ฉ๋ด ํญ๋ชฉ ํ
ํ๋ฆฟ | DataTemplate
์ฌ์ฉ์ ํ์ ๋ ๋ MenuItem
ํ๋ผ์ด ์์์. |
| ๋
ธ์ | ๋ฅ๋งํน์ ์ํํ ๋ ์ด ์์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฒฝ๋ก ๋ถ๋ถ์
๋๋ค. |
| ๋ฃจํธํธ์คํธ | ๋ฅ๋งํฌ ์์ฑ ์ ์์ฑ๋ URI์ ํธ์คํธ ๋ถ๋ถ์ ๋ฐฐ์นํ ๋ฌธ์์ด |
| ๋
ธ์ ํ | ๋ฅ ๋งํฌ๋ฅผ ์์ฑํ ๋ ์์ฑ๋ URI์ ์คํค๋ง ๋ถ๋ถ์ ๋ฐฐ์นํ ๋ฌธ์์ด |
๊ณต๊ฐ ๋ฐฉ๋ฒ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| GoToAsync | ShellNavigationState
ํฉ๋๋ค. ์ ๋๋ฉ์ด์
์ด ์๋ฃ๋๋ฉด ์๋ฃ๋ ์์
์ ๋ฐํํฉ๋๋ค. |
๊ณต๊ฐ ์ด๋ฒคํธ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ์ | Shell
๋ ์ฌ์ฉ์ ์ํธ ์์ฉ ๋๋ API๋ฅผ ํธ์ถํ๋ ๊ฐ๋ฐ์๋ก ์ธํด ํ์์ ์ํํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฌ๊ธฐ์์ ํ์์ ์ทจ์ํ ์ ์์ต๋๋ค. |
| ํ์ | Shell
์ด(๊ฐ) ํ์ ์ด๋ฒคํธ๋ฅผ ์๋ฃํ์ต๋๋ค. |
ShellItem
์ปฌ๋ ์
public sealed class ShellItemCollection : IEnumerable<ShellItem>, IList<ShellItem>
MenuItem
์ปฌ๋ ์
public sealed class MenuItemCollection : IEnumerable<MenuItem>, IList<MenuItem>
ShellSection
์ปฌ๋ ์
public sealed class ShellSectionCollection : IEnumerable<ShellSection>, IList<ShellSection>
ShellContent
์ปฌ๋ ์
public sealed class ShellContentCollection : IEnumerable<ShellContent>, IList<ShellContent>
๋ฐ์ํ๋ ค๋ ํ์ ์ด๋ฒคํธ๋ฅผ ์ค๋ช
ํ๋ ๋ฐ ์ฌ์ฉ๋๋ EventArgs
์
๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๊ฒฝ์ฐ ShellNavigationEventArgs
์ฌ์ฉํ์ฌ ํ์ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ ์๋ ์์ต๋๋ค.
public class ShellNavigatingEventArgs : EventArgs
{
public ShellNavigationState Current { get; }
public ShellNavigationState Target { get; }
public ShellNavigationSource Source { get; }
public bool CanCancel { get; }
public bool Cancel ();
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ์ฌ | Shell
์ ํ์ฌ NavigationState์
๋๋ค. ์ด ShellNavigationState
GoToAsync
๋ฅผ ํธ์ถํ๋ฉด ์ด ํ์ ์ด๋ฒคํธ๊ฐ ํจ๊ณผ์ ์ผ๋ก ์ทจ์๋ฉ๋๋ค. |
| ๋์ | ์ด ํ์ ์ด๋ฒคํธ๊ฐ ์๋ฃ๋ ํ Shell
์ ์ํ์
๋๋ค. |
| ์ถ์ฒ | ์ด ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด ๋ฐ์ํ ํ์ ์ ํ์
๋๋ค. ์ฌ๋ฌ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ ์ ์์ต๋๋ค. |
| ์ทจ์ ์ทจ์ | ํ์ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ ์ ์๋์ง ์ฌ๋ถ์
๋๋ค. ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. |
๊ณต๊ฐ ๋ฐฉ๋ฒ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ์ทจ์ | ํ์ฌ ํ์ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํฉ๋๋ค. ์ทจ์์ ์ฑ๊ณตํ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค. |
public class ShellNavigatedEventArgs : EventArgs
{
public ShellNavigationState Previous { get; }
public ShellNavigationState Current { get; }
public ShellNavigationSource Source { get; }
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ์ด์ | Shell
์ ์ด์ NavigationState์
๋๋ค. |
| ํ์ฌ | ์ด ํ์ ์ด๋ฒคํธ๊ฐ ์๋ฃ๋์์ ๋ Shell
์ ์ ์ํ์
๋๋ค. |
| ์ถ์ฒ | ์ด ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด ๋ฐ์ํ ํ์ ์ ํ์
๋๋ค. ์ฌ๋ฌ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ ์ ์์ต๋๋ค. |
public class ShellNavigationState
{
public Uri Location { get; set; }
public ShellNavigationState ();
public ShellNavigationState (string location);
public ShellNavigationState (Uri uri);
public static implicit operator ShellNavigationState (Uri uri);
public static implicit operator ShellNavigationState (String value);
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ์์น | Shell
์ ํ์ ์ํ๋ฅผ ์ค๋ช
ํ๋ Uri |
์์ฑ์:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| (๋ฌดํจ) | null ์์น๋ฅผ ์ฌ์ฉํ์ฌ ์ ShellNavigationState
์์ฑ |
| (๋ฌธ์์ด) | ์ ๊ณต๋ string
์ค์ ๋ ์์น๋ฅผ ์ฌ์ฉํ์ฌ ์ ShellNavigationState
์์ฑ |
| (์ฐ๋ฆฌ) | ์ ๊ณต๋ Uri
์ค์ ๋ ์์น๋ฅผ ์ฌ์ฉํ์ฌ ์ ShellNavigationState
์์ฑ |
[Flags]
public enum ShellNavigationSource
{
Unknown = 0,
Push,
Pop,
PopToRoot,
Insert,
Remove,
ShellItemChanged,
ShellSectionChanged,
ShellContentChanged,
}
public class BaseShellItem : NavigableElement
{
public static readonly BindableProperty FlyoutIconProperty;
public static readonly BindableProperty IconProperty;
public static readonly BindableProperty IsCheckedProperty;
public static readonly BindableProperty IsEnabledProperty;
public static readonly BindableProperty TitleProperty;
public ImageSource FlyoutIcon { get; set; }
public ImageSource Icon { get; set; }
public bool IsChecked { get; }
public bool IsEnabled { get; set; }
public string Route { get; set; }
public string Title { get; set; }
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ๋ผ์ด์์ ์์ด์ฝ | ํ๋ผ์ด์์์ ํ์๋ ๋ ์ฌ์ฉํ ๊ธฐ๋ณธ ์์ด์ฝ์
๋๋ค. ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ด์ฝ์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
| ์์ด์ฝ | ํ๋ผ์ด์์์ด ์๋ ํฌ๋กฌ ๋ถ๋ถ์ ํ์ํ ์์ด์ฝ์
๋๋ค. |
| ์ฒดํฌ๋จ | BaseShellItem
๊ฐ ํ์ฌ ํ๋ผ์ด์์์์ ์ ํ๋์ด ์๋ ๊ฒฝ์ฐ(๋ฐ๋ผ์ ๊ฐ์กฐ ํ์๋์ด์ผ ํจ) |
| ํ์ฑํ๋จ | BaseShellItem
๊ฐ ํฌ๋กฌ์์ ์ ํ ๊ฐ๋ฅํ ๊ฒฝ์ฐ |
| ๋
ธ์ | Routing.Route ์ค์ ์ ํด๋น |
| ์ ๋ชฉ | UI์ ํ์ํ ์ ๋ชฉ |
public class ShellGroupItem : BaseShellItem
{
public static readonly BindableProperty FlyoutDisplayOptionsProperty;;
public FlyoutDisplayOptions FlyoutDisplayOptions { get; set; }
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ๋ผ์ด์์๋์คํ๋ ์ด์ต์
| ์ด ํญ๋ชฉ๊ณผ ํด๋น ํ์ ํญ๋ชฉ์ด ํ๋ผ์ด์์์ ํ์๋๋ ๋ฐฉ์์ ์ ์ดํฉ๋๋ค. |
[ContentProperty("Items")]
public class ShellItem : ShellGroupItem, IShellItemController, IElementConfiguration<ShellItem>
{
public static readonly BindableProperty CurrentItemProperty;
public ShellItem();
public ShellSection CurrentItem { get; set; }
public ShellSectionCollection Items;
public static implicit operator ShellItem(ShellSection shellSection);
public static implicit operator ShellItem(ShellContent shellContent);
public static implicit operator ShellItem(TemplatedPage page);
public static implicit operator ShellItem(MenuItem menuItem);
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ์ฌ ํญ๋ชฉ | ์ ํํ ShellSection
. |
| ํญ๋ชฉ | ShellItem์ ๊ธฐ๋ณธ ์ฝํ
์ธ ์ธ ShellSectionCollection
์
๋๋ค. ์ด ์ปฌ๋ ์
์ ShellItem ๋ด์ ๋ชจ๋ ํญ์ ์ ์ํฉ๋๋ค. |
[ContentProperty("Items")]
public class ShellSection : ShellGroupItem, IShellSectionController
{
public static readonly BindableProperty CurrentItemProperty;
public static readonly BindableProperty ItemsProperty
public ShellSection();
public ShellContent CurrentItem { get; set; }
public ShellContentCollection Items { get; }
public IReadOnlyList<Page> Stack { get; }
public static implicit operator ShellSection(ShellContent shellContent);
public virtual async Task GoToAsync(List<string> routes, IDictionary<string, string> queryData, bool animate);
protected virtual IReadOnlyList<Page> GetNavigationStack();
protected virtual void OnInsertPageBefore(Page page, Page before);
protected async virtual Task<Page> OnPopAsync(bool animated);
protected virtual async Task OnPopToRootAsync(bool animated);
protected virtual Task OnPushAsync(Page page, bool animated);
protected virtual void OnRemovePage(Page page);
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ํ์ฌ ํญ๋ชฉ | ShellSection์ ์ ํ๋ ShellContent
์
๋๋ค. |
| ํญ๋ชฉ | ShellContentCollection
๋ ShellSection์ ๋ฃจํธ ์ฝํ
์ธ ์
๋๋ค. |
| ์คํ | ShellSection์์ ํ์ฌ ํธ์๋ ํ์ ์คํ์
๋๋ค. |
ํ๋ ์์:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| GoToAsync | ๋ฅ๋งํฌ์์ ์๋ ค์ง ์์น๋ก ์ด๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ง์ ํธ์ถํ ํ์๊ฐ ์์ต๋๋ค. |
| GetNavigationStack | ํ์ฌ ํ์ ์คํ์ ๋ฐํํฉ๋๋ค. |
| OnInsertPageBefore | INavigation
์ธํฐํ์ด์ค InsertPageBefore
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ํธ์ถ๋จ |
| OnPopAsync | INavigation
์ธํฐํ์ด์ค PopAsync
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ํธ์ถ๋จ |
| OnPopToRootAsync | INavigation
์ธํฐํ์ด์ค PopToRootAsync
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ํธ์ถ๋จ |
| OnPushAsync | INavigation
์ธํฐํ์ด์ค PushAsync
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ํธ์ถ๋จ |
| ์ ๊ฑฐ ํ์ด์ง | INavigation
์ธํฐํ์ด์ค RemovePage
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ํธ์ถ๋จ |
[ContentProperty("Content")]
public class ShellContent : BaseShellItem, IShellContentController
{
public static readonly BindableProperty ContentProperty;
public static readonly BindableProperty ContentTemplateProperty;
public static readonly BindableProperty MenuItemsProperty;
public ShellContent();
public object Content { get; set; }
public DataTemplate ContentTemplate { get; set; }
public MenuItemCollection MenuItems { get; }
public static implicit operator ShellContent(TemplatedPage page);
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ๋ด์ฉ | ShellContent์ ๋ด์ฉ์
๋๋ค. ๋ณดํต ContentPage
๋๋ BindingContext
์ Page
์ ์ํด ํฝ์ฐฝ ContentTemplate
|
| ์ฝํ
์ธ ํ
ํ๋ฆฟ | ShellContent
์ ์ฝํ
์ธ ๋ฅผ ๋์ ์ผ๋ก ํ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Content
์์ฑ์ ์ธํ๋ ์ด์
ํ BindingContext
๋ก ์ค์ ๋ฉ๋๋ค. |
| ๋ฉ๋ด ํญ๋ชฉ | ์ด ShellContent๊ฐ ํ์๋ ํ์ด์ง์ผ ๋ ํ๋ผ์ด์์์ ํ์ํ ํญ๋ชฉ |
public class SearchHandler : BindableObject, ISearchHandlerController
{
public static readonly BindableProperty ClearIconHelpTextProperty;
public static readonly BindableProperty ClearIconNameProperty;
public static readonly BindableProperty ClearIconProperty;
public static readonly BindableProperty ClearPlaceholderCommandParameterProperty;
public static readonly BindableProperty ClearPlaceholderCommandProperty;
public static readonly BindableProperty ClearPlaceholderEnabledProperty;
public static readonly BindableProperty ClearPlaceholderHelpTextProperty;
public static readonly BindableProperty ClearPlaceholderIconProperty;
public static readonly BindableProperty ClearPlaceholderNameProperty;
public static readonly BindableProperty CommandParameterProperty;
public static readonly BindableProperty CommandProperty;
public static readonly BindableProperty DisplayMemberNameProperty;
public static readonly BindableProperty IsSearchEnabledProperty;
public static readonly BindableProperty ItemsSourceProperty;
public static readonly BindableProperty ItemTemplateProperty;
public static readonly BindableProperty PlaceholderProperty;
public static readonly BindableProperty QueryIconHelpTextProperty;
public static readonly BindableProperty QueryIconNameProperty;
public static readonly BindableProperty QueryIconProperty;
public static readonly BindableProperty QueryProperty;
public static readonly BindableProperty SearchBoxVisibilityProperty;
public static readonly BindableProperty ShowsResultsProperty;
public ImageSource ClearIcon { get; set; }
public string ClearIconHelpText { get; set; }
public string ClearIconName { get; set; }
public ICommand ClearPlaceholderCommand { get; set; }
public object ClearPlaceholderCommandParameter { get; set; }
public bool ClearPlaceholderEnabled { get; set; }
public string ClearPlaceholderHelpText { get; set; }
public ImageSource ClearPlaceholderIcon { get; set; }
public string ClearPlaceholderName { get; set; }
public ICommand Command { get; set; }
public object CommandParameter { get; set; }
public string DisplayMemberName { get; set; }
public bool IsSearchEnabled { get; set; }
public IEnumerable ItemsSource { get; set; }
public DataTemplate ItemTemplate { get; set; }
public string Placeholder { get; set; }
public string Query { get; set; }
public ImageSource QueryIcon { get; set; }
public string QueryIconHelpText { get; set; }
public string QueryIconName { get; set; }
public SearchBoxVisiblity SearchBoxVisibility { get; set; }
public bool ShowsResults { get; set; }
protected virtual void OnClearPlaceholderClicked();
protected virtual void OnItemSelected(object item);
protected virtual void OnQueryChanged(string oldValue, string newValue);
protected virtual void OnQueryConfirmed();
}
์์ฑ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ClearIconHelpText | ์ง์ฐ๊ธฐ ์์ด์ฝ์ ๋ํ ์ก์ธ์ค ๊ฐ๋ฅํ ๋์๋ง ํ
์คํธ |
| ClearIconName์์ฑ | ์คํฌ๋ฆฐ ๋ฆฌ๋์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ์ง์ฐ๊ธฐ ์์ด์ฝ์ ์ด๋ฆ |
| ํด๋ฆฌ์ด ์์ด์ฝ | ๊ฒ์ ์์์ ๋ด์ฉ์ ์ง์ฐ๊ธฐ ์ํด ํ์๋๋ ์์ด์ฝ์
๋๋ค. |
| ClearPlaceholder๋ช
๋ น ๋งค๊ฐ๋ณ์ | ClearPlaceholderCommand
๋ํ ๋งค๊ฐ๋ณ์ |
| ClearPlacehodlerCommand | ClearPlaceholder ์์ด์ฝ์ ๋๋ฅผ ๋ ์คํํ ๋ช
๋ น |
| ClearPlaceholderEnabled | ClearPlaceholderIcon์ ํ์ฑํ ์ํ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ true์
๋๋ค. |
| ClearPlaceholderHelpText | ๋ช
ํํ ์๋ฆฌ ํ์์ ์์ด์ฝ์ ๋ํ ์ก์ธ์ค ๊ฐ๋ฅํ ๋์๋ง ํ
์คํธ |
| ClearPlaceholderIcon | ๊ฒ์ ์์๊ฐ ๋น์ด ์์ ๋ ClearIcon
์์น์ ํ์๋๋ ์์ด์ฝ์
๋๋ค. |
| ClearPlaceholderName | ํ๋ฉด ํ๋
๊ธฐ์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ๋ช
ํํ ์๋ฆฌ ํ์์ ์์ด์ฝ์ ์ด๋ฆ |
| ๋ช
๋ น ๋งค๊ฐ๋ณ์ | Command
๋ํ ๋งค๊ฐ๋ณ์ |
| ๋ช
๋ น | ์ฟผ๋ฆฌ ํ์ธ ์ ์คํํ ICommand
| DisplayMemberPath | ItemsSource
๊ฐ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ํ์๋๋ ์์ฑ์ ์ด๋ฆ ๋๋ ๊ฒฝ๋ก์
๋๋ค. |
| ๊ฒ์ ๊ฐ๋ฅ | ๊ฒ์ ์์์ ํ์ฑํ ์ํ๋ฅผ ์ ์ดํฉ๋๋ค. |
| ํญ๋ชฉ ์์ค | ์ ์ ์์ญ์ ํ์ํ ํญ๋ชฉ ๋ชจ์์
๋๋ค. |
| ํญ๋ชฉ ํ
ํ๋ฆฟ | ์ ์ ์์ญ์ ํ์๋๋ ํญ๋ชฉ์ ํ
ํ๋ฆฟ์
๋๋ค. |
| ์๋ฆฌ ํ์์ | ๊ฒ์ ์์๊ฐ ๋น์ด ์์ ๋ ํ์ํ ๋ฌธ์์ด์
๋๋ค. |
| QueryIconHelpText์์ฑ | ์ฟผ๋ฆฌ ์์ด์ฝ์ ๋ํ ์ก์ธ์ค ๊ฐ๋ฅํ ๋์๋ง ํ
์คํธ |
| QueryIconName์์ฑ | ํ๋ฉด ํ๋
๊ธฐ์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ์ฟผ๋ฆฌ ์์ด์ฝ์ ์ด๋ฆ |
| ์ฟผ๋ฆฌ ์์ด์ฝ | ๊ฒ์์ด ๊ฐ๋ฅํจ์ ์ฌ์ฉ์์๊ฒ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ด์ฝ |
| ์ฟผ๋ฆฌ | ๊ฒ์ ์์์ ํ์ฌ ๋ฌธ์์ด์
๋๋ค. |
| SearchBox๊ฐ์์ฑ | Shell
ํฌ๋กฌ์์ ๊ฒ์ ์์์ ๊ฐ์์ฑ์ ์ ์ํฉ๋๋ค. |
| ์ผ๊ฒฐ๊ณผ | ํ
์คํธ ์
๋ ฅ ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์ํด์ผ ํ๋์ง ๊ฒฐ์ |
๋ณดํธ ๋ฐฉ๋ฒ:
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| OnClearPlaceholderClicked | ClearPlaceholder ์์ด์ฝ์ ๋๋ฅผ ๋๋ง๋ค ํธ์ถ๋ฉ๋๋ค. |
| ํญ๋ชฉ ์ ํ๋จ | ์ฌ์ฉ์๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ฅผ ๋๋ง๋ค ํธ์ถ๋จ |
| OnQueryํ์ธ๋จ | ์ฌ์ฉ์๊ฐ Enter ํค๋ฅผ ๋๋ฅด๊ฑฐ๋ ๊ฒ์ ์์์์ ํญ๋ชฉ์ ํ์ธํ ๋๋ง๋ค ํธ์ถ๋ฉ๋๋ค. |
| ์ฟผ๋ฆฌ ๋ณ๊ฒฝ๋จ | Query
๊ฐ ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋ฉ๋๋ค. |
public enum SearchBoxVisiblity
{
Hidden,
Collapsable,
Expanded
}
| ๊ฐ์น | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ์จ๊ฒจ์ง | ๊ฒ์ ์์๊ฐ ๋ณด์ด์ง ์๊ฑฐ๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. |
| ์ ์ ์ ์๋ | ์ฌ์ฉ์๊ฐ ๊ฒ์ ์์๋ฅผ ํ์ํ๋ ์์
์ ์ํํ ๋๊น์ง ๊ฒ์ ์์๊ฐ ์จ๊ฒจ์ง๋๋ค. |
| ํ์ฅ | ๊ฒ์ ์์๋ ์์ ํ ํ์ฅ๋ ํญ๋ชฉ์ผ๋ก ํ์๋ฉ๋๋ค. |
public class BackButtonBehavior : BindableObject
{
public ImageSource IconOverride { get; set; }
public string TextOverride { get; set; }
public ICommand Command { get; set; }
public object CommandParameter { get; set; }
}
| API | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ์์ด์ฝ ์ฌ์ ์ | ๋ค๋ก ๋ฒํผ์ ์ฌ์ฉ๋๋ ์์ด์ฝ์ ๋ณ๊ฒฝํฉ๋๋ค. |
| ํ
์คํธ ์ฌ์ ์ | ํ
์คํธ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๋ค๋ก ํ์์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ ํ
์คํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. |
| ๋ช
๋ น | ๋ค๋ก ๋ฒํผ์ ๋๋ ์ ๋ ํธ์ถํ ๋์ฒด ๋ช
๋ น์ ์ ๊ณตํฉ๋๋ค. |
| ๋ช
๋ น ๋งค๊ฐ๋ณ์ | Command
์ ํจ๊ป ์ฌ์ฉ๋๋ ๋ช
๋ น ๋งค๊ฐ๋ณ์ |
ShellGroupItem
๊ฐ FlyoutMenu์ ํ์๋๋ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค.
public enum FlyoutDisplayOptions
{
AsSingleItem,
AsMultipleItems,
}
| ๊ฐ์น | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| AsSingleItem | ShellGroupItem
์ ํ๋ผ์ด์์์์ ๋จ์ผ ํญ๋ชฉ์ผ๋ก ํ์๋ฉ๋๋ค. |
| AsMultipleItems | ShellGroupItem
๋ ํ๋ผ์ด์์์ ๊ฐ ํ์ ํญ๋ชฉ์ ๋ํด ํ๋์ฉ ํญ๋ชฉ ๊ทธ๋ฃน์ผ๋ก ํ์๋ฉ๋๋ค. |
์คํฌ๋กคํ ๋ FlyoutHeader์ ๋์์ ์ ์ดํฉ๋๋ค.
public enum FlyoutHeaderBehavior {
Default,
Fixed,
Scroll,
CollapseOnScroll,
}
| ๊ฐ์น | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ๊ธฐ๋ณธ๊ฐ | ํ๋ซํผ ๊ธฐ๋ณธ ๋์. |
| ๊ณ ์ | ํค๋๋ ํญ์ ํ์๋๊ณ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. |
| ์คํฌ๋กค | ์ฌ์ฉ์๊ฐ ๋ฉ๋ด๋ฅผ ์คํฌ๋กคํ ๋ ํค๋๊ฐ ๋ณด์ด์ง ์๊ฒ ์คํฌ๋กค๋จ |
| CollapseOnScroll | ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋๋ง ํค๋๊ฐ ์ ๋ชฉ์ผ๋ก ์ถ์๋จ |
public enum FlyoutBehavior
{
Disabled,
Flyout,
Locked
}
| ๊ฐ์น | ์ค๋ช
|
| -----------| -------------------------------------------------- ------------------------------------------|
| ์ฅ์ ์ธ | ์ฌ์ฉ์๋ ํ๋ผ์ด์์์ ์ก์ธ์คํ ์ ์์ต๋๋ค. |
| ํ๋ผ์ด์์ | ํ๋ผ์ด์์์ ์ฌ์ฉ์๊ฐ ์ด๊ฑฐ๋ ๋ซ์ ์ ์๋ ์ผ๋ฐ ํ๋ผ์ด์์์ผ๋ก ์๋ํฉ๋๋ค. |
| ์ ๊น | ํ๋ผ์ด์์์ ์ ๊ฒจ ์์ผ๋ฉฐ ์ฌ์ฉ์๊ฐ ๋ซ์ ์ ์์ผ๋ฉฐ ์ฝํ
์ธ ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ์์ต๋๋ค. |
์ด ํ์ฅ์ ์ ํ์ ControlTemplate์ผ๋ก ๋น ๋ฅด๊ฒ ๋ณํํฉ๋๋ค. ์ด๋ ํ ํ๋ฆฟ์ด ๋ค์๊ณผ ๊ฐ์ด ์ง์ ๋๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<local:MyCell />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
์ด๊ฒ์ ๋ค์์ผ๋ก ์์ถ๋ ์ ์๋ค.
<ListView ItemTemplate="{DataTemplate local:MyCell}" />
public sealed class ControlTemplateExtension : IBindingExtension<ControlTemplate>
public sealed class DataTemplateExtension : IBindingExtension<DataTemplate>
์ด๊ฒ์ ํญ์ ์ด์ ์ ๋ง์ถ๊ณ PopToRoot๋ฅผ ํธ์ถํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ด์ ShellItem์ด ํ ํ๋ฆฟํ๋ ๊ฒฝ์ฐ ๋ฐฑ ์คํ์ด ์์ค๋ฉ๋๋ค. ShellItem์ด ํ ํ๋ฆฟํ๋์ง ์์ ๊ฒฝ์ฐ BackStack์ ๊ทธ๋๋ก ์ ์ง๋๊ณ ์ด์ ShellItem์ผ๋ก ๋ค์ ์ ํํ ๋ ๋ฐฑ์คํ์ด ์ ๋๋ก ๋ฐ์๋ฉ๋๋ค. ๋ค์ ์ ํํ๋ฉด ์์ ๋ต๋ณ์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ฐฑ ์คํ์ด ์ง์์ง ์ ์์ต๋๋ค.
์ ธ ์ฌ์ฉ์ ์ฃผ์ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์คํ์ ์์ํ ๋ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ก๋ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๋ง์ ์์ ์ฝํ ์ธ ํ์ด์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ด ๋๊ท๋ชจ ํ๋ฐํธ๋ก๋ ํ ๋น์ผ๋ก ์ธํด ์์ ์ฑ๋ฅ์ด ์๋นํ ์ ํ๋ ์ ์์ต๋๋ค. ์ด ํ ํ๋ฆฟ์ ์์ ํ๋ ค๋ฉด ๊ฐ๋ฅํ ํ ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค.
์ ธ ํญ ํญ๋ชฉ ํ ํ๋ฆฟ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ ํ๋ฆฟ ์ค ๊ฐ์ฅ ์ธ๋ถํ๋ ํํ์ด๋ฉฐ ๋คํํ๋ ๊ฐ์ฅ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค. ๋ค์ ์์ ๊ฐ์ ธ ๊ฐ๋ผ.
<?xml version="1.0" encoding="utf-8" ?>
<MaterialShell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.Shell">
<ShellItem Title="My apps & games">
<local:UpdatesPage />
<local:InstalledPage />
<local:LibraryPage />
</ShellItem>
<ShellItem GroupBehavior="ShowTabs">
<local:HomePage />
<local:GamesPage />
<local:MoviesTVPage />
<local:BooksPage />
<local:MusicPage />
<local:NewsstandPage />
</ShellItem>
</MaterialShell>
์ด ์ ธ์ด ๋ก๋๋๋ฉด 9ํ์ด์ง๊ฐ ํ ๋ฒ์ ๋ชจ๋ ํ์ฅ๋ฉ๋๋ค. ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ ค๋ฉด ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ ์ ์์ต๋๋ค.
<?xml version="1.0" encoding="utf-8" ?>
<MaterialShell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.Shell">
<ShellItem Title="My apps & games">
<ShellContent Title="Updates" Icon="updates.png" ContentTemplate="{DataTemplate local:UpdatesPage}" />
<ShellContent Title="Installed Apps" Icon="apps.png" ContentTemplate="{DataTemplate local:InstalledPage}" />
<ShellContent Title="Library" Icon="library.png" ContentTemplate="{DataTemplate local:LibraryPage}" />
</ShellItem>
<ShellItem GroupBehavior="ShowTabs">
<ShellContent Title="Home" Icon="updates.png" ContentTemplate="{DataTemplate local:HomePage}" />
<ShellContent Title="Games" Icon="games.png" ContentTemplate="{DataTemplate local:GamesPage}" />
<ShellContent Title="Movies and TV" Icon="moviesTV.png" ContentTemplate="{DataTemplate local:MoviesTVPage}" />
<ShellContent Title="Books" Icon="books.png" ContentTemplate="{DataTemplate local:BooksPage}" />
<ShellContent Title="Music" Icon="music.png" ContentTemplate="{DataTemplate local:MusicPage}" />
<ShellContent Title="Newsstand" Icon="newsstand.png" ContentTemplate="{DataTemplate local:NewsstandPage}" />
</ShellItem>
</MaterialShell>
ํ์ด์ง๋ ์ด์ ํ์ํ ๋๋ง ๋ก๋๋๋ฉฐ ํ์์ ๋ฐ๋ผ ์ธ๋ก๋ํ ์๋ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ShellItem ์์ฒด๋ฅผ ์ปฌ๋ ์ ๊ณผ DataTemplateSelector๋ก ํ ํ๋ฆฟํํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ShellContents๋ ์ด์ฌํ ๋ก๋ํด์ผ ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. . ShellContent ํ ํ๋ฆฟ์ ์ฑ๋ฅ ๋ฌธ์ ์ ๋ํ ํ ํ๋ฆฟ์ ์ ๊ณตํ๋ ํต์ฌ ์์ญ์ด์ด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฝ๋ฉํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฐ๋ชจ๋ฅผ ์ํ ๊ฒ์ด ์๋๋ผ GPS์ฉ UI๋ฅผ ํจ๊ป ๋ฐ์ด ๋ฃ๋ ๊ฐ์ฅ ๊ฐ๊ฒฐํ ํ์์ ๋๋ค. ๋ํ ViewModel ๋ฐ DataTemplateSelector๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ ํ์ด์ง๋ฅผ ๊ฐ์ํํ๋ ค๊ณ ์๋ํ์ง ์์ต๋๋ค. ์ฆ, ์ฑ ์์ ์ ๋ชจ๋ ํ์ด์ง๊ฐ ๋ก๋๋๋ฏ๋ก ์ฑ๋ฅ์ด ๋งค์ฐ ์ข์ง ์์ต๋๋ค. ๋ ์๋ ๊ฒฝ๊ณ ํฉ๋๋ค.
๋ชจ๋ ํ์ด์ง ์ฝํ ์ธ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ด๋ ํฌ๋กฌ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
์ด์ ๋ํ ์ ์ ํ ๊ตฌํ์ ๋ชจ๋ ํ์ด์ง์ ๋ํด ShellItems๋ฅผ ์ฌ์ฉํ๊ณ ItemsSource ๋ฐ ItemTemplate์ ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ํ์ด์ง๊ฐ ํ์ํ ๋๋ง ๋ก๋๋๊ณ ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์ธ๋ก๋๋ ์ ์์ต๋๋ค.
<?xml version="1.0" encoding="utf-8" ?>
<MaterialShell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.Shell"
FlyoutHeaderBehavior="Fixed"
FlyoutHeader="{x:Bind HeaderViewModel}">
<MaterialShell.FlyoutHeaderTemplate>
<local:CircleImageAndLabelControl HeightRequest="350" />
</MaterialShell.FlyoutHeaderTempalte>
<ShellItem Title="My apps & games">
<ShellItem.ShellAppearance>
<MaterialShellAppearance NavBarCollapseStyle="Full">
</ShellItem.ShellAppearance>
<local:UpdatesPage />
<local:InstalledPage />
<local:LibraryPage />
</ShellItem>
<local:NotificationsPage Title="My notifications" />
<local:SubscriptionsPage />
<ShellItem GroupBehavior="ShowTabs">
<ShellItem.ShellAppearance>
<MaterialShellAppearance NavBarCollapseStyle="Full" TabBarCollapseStyle="Full" UseSwipeGesture="false">
</ShellItem.ShellAppearance>
<local:HomePage />
<local:GamesPage />
<ShellContent Title="Movies & TV" Icon="moviesTV.png" ContentTemplate="{DataTemplate local:MoviesTVPage}">
<ShellContent.MenuItems>
<MenuItem Title="Open Movies & TV app" Command="{xBind MoviesTVAppCommand}" />
</ShellContent.MenuItems>
</ShellContent>
<ShellContent Title="Books" Icon="books.png" ContentTemplate="{DataTemplate local:BooksPage}">
<ShellContent.MenuItems>
<MenuItem Title="Open Books app" Command="{xBind BooksAppCommand}" />
</ShellContent.MenuItems>
</ShellContent>
<ShellContent Title="Music" Icon="music.png" ContentTemplate="{DataTemplate local:MusicPage}">
<ShellContent.MenuItems>
<MenuItem Title="Open Music app" Command="{xBind MusicAppCommand}" />
</ShellContent.MenuItems>
</ShellContent>
<ShellContent Title="Newsstand" Icon="newsstand.png" ContentTemplate="{DataTemplate local:NewsstandPage}">
<ShellContent.MenuItems>
<MenuItem Title="Open Newsstand app" Command="{xBind NewsstandAppCommand}" />
</ShellContent.MenuItems>
</ShellItem>
<local:AccountPage />
<MenuItem Title="Redeem" Icon="redeem.png" Command="{x:Bind RedeemCommand}" />
<local:WishlistPage />
<MenuItem Title="Play Protect" Icon="protect.png" Command="{x:Bind NavigateCommand}" CommandParameter="ProtectPage" />
<MenuItem Title="Settings" Icon="settings.png" Command="{x:Bind SettingsCommand}" CommandParameter="SettingsPage" />
<MaterialShell.MenuItems>
<MenuItem Title="Help & feedback" Command="{x:Bind NavigateCommand}" CommandParameter="HelpPage" />
<MenuItem Title="Parent Guide" Command="{x:Bind NavigateCommand}" CommandParameter="ParentPage" />
<MenuItem Title="Help & feedback" Command="{x:Bind UrlCommand}" CommandParameter="http://support.google.com/whatever" />
</MaterialShell.MenuItems>
</MaterialShell>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.HomePage"
Title="Home"
Icon="home.png"
ShellAppearance.BackgroundColor="Green">
<Label Text="Home content here" />
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.MoviesTVPage"
Title="Movies & TV"
Icon="movies.png"
ShellAppearance.BackgroundColor="Red">
<Label Text="Movies and TV content here" />
</ContentPage>
๊ทธ๋ฆฌ๊ณ ๊ฒ์์ฐฝ์ ์ถ๊ฐํฉ๋๋ค.
public class HomePage : ContentPage
{
public class HomeSearchHandler : SearchHandler
{
public HomeSearchHandler ()
{
SearchBoxVisibility = SearchBoxVisibility.Expanded;
IsSearchEnabled = true;
Placeholder = "Google Play";
CancelPlaceholderIcon = "microphone.png"
}
protected override void OnSearchConfirmed (string query)
{ // Navigate to search results page here
}
protected override void OnSearchChanged (string oldValue, string newValue)
{
}
protected override void OnCancelPlaceholderPressed ()
{
// Trigger voice API here
}
}
public HomePage
{
Shell.SetSearchHandler (this, new HomeSearchHandler ());
}
}
์์๊ณผ ๋ด์ฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๋ ๋ฑ์ ์์ ์ด ์ํ๋ฉ๋๋ค.
๋ค๋ก ๋ฒํผ์ ๋๋ฅผ ๋๊น์ง ํ๋ผ์ด์์์ ์ก์ธ์คํ ์ ์๋ ์ค์ ํ์ด์ง์ ๊ฐ์ ํ์ด์ง์ ๊ฒฝ์ฐ:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyStore"
x:Class="MyStore.SettingsPage"
Title="Settings"
Icon="settings.png"
ShellAppearance.BackgroundColor="Grey"
MaterialShell.FlyoutBehavior="Disabled">
<Label Text="Settings content here" />
</ContentPage>
์ด ์ธํฐํ์ด์ค๊ฐ ํ๋ ์ผ์ด ๋ง๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ์ฅํด์ผ ํ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ๊ตฌํํ ์ ์๋ ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์ฌ์ผ ํฉ๋๋ค. ์ด ๋ถํํ ๊ฒ์ ๋ ๋ค๋ฅธ ๊ฐ์ฒด ํ ๋น์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ ํฅํ์๋ ์ ์ฐ์ฑ์ ์ ์งํฉ๋๋ค. ์ด๋ฌํ ๋ณํ๊ฐ ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ฒจ๋ถ API๋ ์ฝ๊ฐ ๋ฌด๊ฒ๊ณ ์ฌ์ฉ์์๊ฒ ๋๋ฌด ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. ๋ ๋์ ๊ฒ์ ์ฒจ๋ถ ํ์ผ์ด ์ ๋๋ฉ์ด์ ๊ณผ ํจ๊ป ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ชจ๋ ํ๋ซํผ์ ์ ๋งคํ๋์ง ์์ ์ ์์ต๋๋ค. ์ด API๋ฅผ ๊ฒ์ฆํ๋ ค๋ฉด ๋ ๋ง์ ์์ ์ด ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ธ ์ฌ๋ฌ๋ถ์ ์๊ฒฌ์ ์ ๋ง ๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ํ๋ฅผ ํฅ๊ฒน๊ฒ ํฉ์๋ค!
๋จผ์ , @jassmith ์๊ฒ ์ด๊ฒ์ ํฌ์ฐฉํ๊ณ ๊ณต๊ฐ ํ ๋ก ์ ์ํ ์ ์์๋ฅผ
์ ๋ ์ ์๊ฐ์ ๊ณต์ ํ๊ณ , ์ด๋ฆฌ์์ ์ง๋ฌธ์ ํ๊ณ , ๋๋ฌด ์ ๋์ ์ด์ง ์์ ์ง๋ฌธ์ ํ ๊ฒ์ ๋๋ค. Xamarin.Forms์ ํ๋ก๊ทธ๋จ ๊ด๋ฆฌ์๋ก์ ์ ๋ ์ข ์ข ์ง๋ฌธ์ ํด์ ์๋ฌด๋ฐ ๋จ์๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง(๋๋ก๋ ๋ชจ๋ฅผ ๋๋ ์์) ๋ง์ ์ ์ ๋ฃ๋ ๊ฒ.
์ด ์ ์์์ ์ ๊ฐ ์ข์ํ๋ ๋ถ๋ถ์ด ์์ต๋๋ค. ์๋ํ๋ฉด ์ ๊ฐ ์ฌ๋ฌ๋ถ ์ค ๋ง์ ์ฌ๋๋ค๊ณผ ์ด์ผ๊ธฐํด ์์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ํด๊ฒฐ์ ์ํด ๋ ธ๋ ฅํ๊ณ ์๋ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ ์์ฝ์ด ์์ต๋๋ค.
Shell ๊ฐ๋ ๊ณผ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๋ํ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์๊ฐ์ผ๋ก ์์ํ๊ฒ ์ต๋๋ค.
์ ์ ํ๊ฒ ๊ตฌ์ฑ๋ ์์ ํ ์ฑ ๊ฒฝํ์ ์ป์ผ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฃผ ์ ์ ๋ ธ๋ ฅ๊ณผ ๋ช ํํ ๊ฒฝ๋ก๋ก ์ฌ๋ฐ๋ฅธ ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์ต์์ ์์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ ํํฉ๋๊น? ๊ฐ์กฐํด์ผ ํ ๋ค๋ฅธ ์ด์ ์ ๋ฌด์์ ๋๊น?
App
๋์ MaterialShell
์์ต๋๋ค. ์ด์ ์ ์ป์ผ๋ ค๋ฉด ์๋ก์ด ์ต์์ ์ ํ๋ฆฌ์ผ์ด์
ํจ๋ฌ๋ค์์ ํ์ต/์ฑํํด์ผ ํฉ๋๊น?
๋ด ์ฑ์ ๋ค์ด๊ฐ๋ฉด ContentPage
๋
์ผ๋ก ๋์๊ฐ๋๋ค. ๋ง์ฃ ? ํ์ง๋ง ๋ด Button
์ Entry
๋ ๋ชจ๋ ๋ฌผ์ง์ ์ด๊ณ ์์๋ค. ์ฌ์ ํ OnPlatform
๋ฑ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๋ซํผ์์ ๋ค๋ฅด๊ฒ ๋ณด์ด๊ฒ ํ ์ ์์ต๋๊น?
๊ธฐ์กด ์ฑ์์ ์ด "์"์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ง์ด๊ทธ๋ ์ด์
๊ฒฝ๋ก๋ ์ด๋ป๊ฒ ๋ฉ๋๊น? ์๋ก์ด MaterialShell
์๊ฐํ๊ณ , ๋ด ์ฑ์ ๊ตฌ์กฐ์ ๋ชจ์์ ์ค๋ช
ํ๊ณ , ์๋ก์ด ์ฅ์ ์ ๋ณด๊ธฐ ์ํด ์คํํ๋ฉด ๋ฉ๋๋ค.
Flyout
๋๋ ๋ฉ๋ด ํญ๋ชฉ ๋ชจ์์ด ๋ง์์ ๋ค์ง๋ง ๋์์ด๋ ๊ตฌ์ฑ ์์์ ๋ง๊ฒ ์กฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ต์
์ ๋ฌด์์
๋๊น? ์ด๋ ์์ ์์ "์ด ๋ชจ๋ ๊ฒ์ ์ค์ค๋ก ๋กค๋งํ์ด์ผ ํ๋ค"๊ณ ๋งํ๊ณ ์๋ ๊ฒ์ ํ์ค Xamarin.Forms ์ฑ ๊ตฌ์กฐ๋ก ์ฎ๊ธฐ๊ณ ์์ต๋๊น?
MaterialShell
๋ฅผ ์์ ํ ํฌ๊ธฐํด์ผ ํ๋ ๊ฒฝ์ฐ ์คํ์ผ๋ง์ ์ฅ์ ์ ๋ชจ๋ ์๊ณ iOS์ Android ๋ฐ UWP ๊ฐ์ ์๋นํ ๋ค๋ฅด๊ฒ ๋ณด์ด๋ Entry
์์ํ๋ (์ค๋์ฒ๋ผ) ๋ค์ ๋์๊ฐ๋๋ค. ? ํ์ง ์์์ผ๋ฉด ํฉ๋๋ค.
์ ๊ฐ ์์ํ๋ ์ ํ์ ์ด ์์ต๋๋ค. ๋น ๋ฅด๊ฒ ์งํํ๊ธฐ ์ํด ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ํ์๋ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ ๋๋ฌํ๊ณ ๋ด ์ต์
์ ํ์ํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ฌด์์ด๋ฉฐ ์ด๋ค ์์ ์์ MaterialShell
์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น?
์ฝ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ช ๊ฐ์ง ์ง๋ฌธ์ ํ๋ฉฐ ์ด ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค.
๊ฐ๋ฅํ๋ค๋ฉด ์คํฌ๋ฆฐ์ท/๋์์ธ ์ด๋ฏธ์ง๊ฐ ๋ ๋์์ง ๊ฒ์ ๋๋ค.
๋ํ ๋ค์์ ํ์ธํ์ญ์์ค.
@jassmith ์ ์ฒด์ ์ธ ์์ด๋์ด๋ฅผ ์ด๋ฏธ์ง๋ก
๋ด ์ฟผ๋ฆฌ๋
์ฌ๊ธฐ์๋ ๋ถ๋ ๋ ์ด๋ธ/์๋ฆฌ ํ์์ ๋ฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ง์ํ๋ TextInputLayout๊ณผ ์ ์ฌํ ํญ๋ชฉ๋ ํฌํจ๋ฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด wpf์ ์ ์ฌํ 'ValidateOnDataErrors'๋ฅผ ํฌํจํ๋๋ก Binding
๋ฅผ ํ์ฅํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์์ ๋ด ๊ตฌํ์ ์ฐธ์กฐํ์ญ์์ค.
https://github.com/XamFormsExtended/Xfx.Controls/blob/develop/src/Xfx.Controls/XfxBinding.cs
๋ํ MaterialShell์ด โโShell์ ํ์ฅํ์ฌ iOS ๋ชจ์๊ณผ ๋๋์ ์ํ HumanInterfaceShell์ ๋ง๋ค ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
@ChaseFlorell ๊ทธ๊ฒ๋ ๋ด ์๊ฒฌ์ด ๋ ์์ ์ด์์ต๋๋ค. ์ฌ์ง์ ํ๋ฅญํ์ง๋ง ํน์ UI ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์์ฒด ์์ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ์๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค.
@davidortinau , @jassmith ,
์ด ์ฌ์์ ์์ฑํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์๊ฒ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ด ์ ์์ด ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ๊ฐ ์ ์ ์๋์ด ์์ต๋๊น?
์. ํ์ ์์คํ ์ Xamarin Forms์์ ์์ ํ ๊ฐ๋ฐ๋์ง ์์์ผ๋ฏ๋ก ์ด๋ฅผ ์๋ฃํ๊ฑฐ๋ ์์ ํ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ฐฉํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ณต์ ํ๋ ๋ฌธ์ ์ธ๊ฐ์?
์.
์ด ์ฌ์์ ์ฝ์ผ๋ฉด์ ์ด์ ํ๋ก์ ํธ์์ ์ง๋ฉดํ ์ด๋ค ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๊น?
๋๋ ๊ทธ๊ฒ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค๊ณ ๋งํจ์ผ๋ก์จ ์ด ์ง๋ฌธ์ ๋๋ตํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ํน๋ณํ ๋ฌธ์ ๋ ํ์ฌ์ ๋ด๋น๊ฒ์ด์ ์์คํ ์ด ๋๋ฌด ๋จ๋จํ์ง ์๋ค๋ ๊ฒ์ด์ง ์ถฉ๋ถํ ๋จ๋จํ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ๋ช ํํ ์๋ TabbedPage์ ๋๋ค. TabbedView ๋ณด๊ธฐ๊ฐ ์์ผ๋ฏ๋ก ์ฑ์ ํญ์ด ํ์ํ๋ฉด TabbedPage๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ฒด ํ๋ฉด์ TabbedPage๊ฐ ์ฐจ์งํด์ผ ํ๋ฉฐ ์์ฒด ๋ฒํผ์ด๋ ํ๋ฉด์ ๋ฃ์ ์ ์๋ ๋ค๋ฅธ ์ปจํธ๋กค์ ๋ํ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ด ๊ถ์ฅ ์ฌํญ์ ํ์ด์ง์ ๊ธฐ๋ฅ์ ๋ค์ ์์ ๊ณ์ธต์ผ๋ก ์ด๋ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ ํ์ด์ง _๋ฐ_์ผ๋ก ์ด๋ํ๊ณ ๋ณด๊ธฐ๋ก ์ด๋ํ๋ ๊ฒ์ด์์ต๋๋ค.
FloatingMenu ๋ฐ FlyoutBehavior์ ๊ฐ์ ํญ๋ชฉ์ ํ์์ด Xamarin.Forms ์์คํ ์ ์ถ๊ฐ๋ก ํ๋ ์ฝ๋ฉ๋๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ ์ถ๊ฐ ์ ์ด๋ฅผ ์ํํ ์ ์์์ ์์ํ๊ธฐ ๋๋ฌธ์ ์ ๋ฅผ ๋๋ ต๊ฒ ํฉ๋๋ค. ์ข ๋ ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ด๋ ์ ๋ ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์์ง๋ง ํ์คํ ๋น์ฉ์ด ๋ค ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ํญ์ Silverlight, WPF ๋ฐ UWP์ ๊ฐ์ ๋ค๋ฅธ XAML ๊ธฐ๋ฐ ๊ธฐ์ ์์ ์์ ํ์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์์๋ ํ์ ์๋ ๋ฐฉ์์ ๋ ๋ง์ด ์ ์ํ ์ ์๋ ํจ์ฌ ๋ ๊ฐ๋ฐฉ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ์ต๊ทผ์๋ UI/UX ์ปจ์คํดํธ๋ฅผ ๊ณ ์ฉํ์ต๋๋ค. ๊ทธ๋ XF์ ๋จ์ ์ ๋ชฐ๋์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ์๊ฒ ์ฐ๋ฆฌ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋ช ๊ฐ์ง ํ๋ฉด์ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ์์ฒญํ์ต๋๋ค. ๊ทธ๊ฐ ์ถ์ฒํ ๋ง์ ๋ถ๋ถ์ TabbedView๊ฐ ์๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ๋ก ๊ตฌํํ ์ ์์์ต๋๋ค. ํ์์ ๋ ์ฝ๊ฒ ๋ง๋๋ ๋์ ์ด ํ๋ ์์ํฌ๊ฐ ์ค์ ๋ก UX/UI ๋์์ด๋๊ฐ ์ ๊ณตํ ๋์์ธ์ ๊ตฌํํ๊ธฐ ๋ ์ด๋ ต๊ฒ ๋ง๋ค๊น๋ด ๋๋ ต์ต๋๋ค.
๋ด๊ฐ ๋งํ๊ณ ์ถ์ ๋ ๋ค๋ฅธ ๊ฒ์ ์ด ํ๋ ์์ํฌ๊ฐ ๋ค๋ฅธ XAML ํ๋ซํผ์์๋ ์ ๋ก๊ฐ ์์ด ๋ณด์ด๊ณ ๋ค๋ฅธ ํ๋ซํผ๊ณผ ํธํ๋์ง ์๋ ์ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ํ๋ซํผ ์ ๋ฐ์ ๊ฑธ์ณ ํ์คํ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฐ์ ์์๊ฐ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ํ์ฌ Silverlight, Xamarin.Forms ๋ฐ WPF์ ์ธ ๊ฐ์ง ํ๋ซํผ์ฉ์ผ๋ก ๋น๋ํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ ํธ์ฐจ๋ฅผ ์ค์ด๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ์ด์์ ๋ง๋ค๊ธฐ ์ํด ํ๋ซํผ ์ ๋ฐ์ ๊ฑธ์ณ ํ์คํํ๋ ๊ฒ์ ๋๋ค.
@dylanberry ,
ํน์ UI ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์์ฒด ์์ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ์๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค.
์. ์ด๊ฒ์ด ์ ๊ด์ฌ์ฌ์ ๋๋ค. ๊ฐ ์ฑ์๋ ๊ณ ์ ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ผ๋ฉฐ, ๋ ์๊ฒฉํด์ง์๋ก ๊ตฌํํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์์ต๋๋ค. https://github.com/xamarin/Xamarin.Forms/issues/2452#issuecomment -380991817
๋๋ ์์ ๋ด์ฉ์ ๋ํ์ดํ๊ณ ์ ์ค์ฒ์ ํฌ์ธํฐ๊ฐ ์ด๋ป๊ฒ irt ๋ชจ์ ํ๋ฆฌ๋ฏธํฐ๋ธ ๊ธฐ๋ฅ์ ํ๋์ง ๋ฌผ์ด๋ณผ ๊ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ธ ์๊ฒฌ์ ์์คํ ์ ์ถ๊ฐ๋ ๋ชจ๋ ์ฝ๋ ํ์ ๋ํด ๋ฒ๊ทธ๊ฐ ์๋ ์ฝ๋๊ฐ ์ถ๊ฐ๋ ๊ฐ๋ฅ์ฑ์ด 3๋ฒ ์ด์ ์๋ค๋ ๊ฒ์ ๋๋ค. Xamarin Forms์๋ ์์ ์ด ํ์ํ ๋ฒ๊ทธ๊ฐ ์ด๋ฏธ ๋ง์ด ์์ต๋๋ค. ์ฝ๋๊ฐ ๋ง์์๋ก ๋ฒ๊ทธ๊ฐ ์ถ๊ฐ๋ ๊ฐ๋ฅ์ฑ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ๋ ๋ง์ ๋ฒ๊ทธ๊ฐ ์์ ๊ฒ์ ๋๋ค. XF ํ์ ์ฝ๋ ๋ฒ ์ด์ค์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ธฐ ๋ณด๋ค๋ ์ค์ด๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฝ๋ ๊ธฐ๋ฐ์ ์ค์ด๋ ๊ฒ์ด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ค์ด๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ธฐ์กด ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ๋จผ์ ๋ชจ๋ ๊ฒ์ด ๊ฒฌ๊ณ ํ์ง ํ์ธํ๋ ๋์ ์๋ก์ด ๊ฒ์ ๋ค์ ๋ฐ๋ช ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ ์๊ฒ ๊ทธ๊ฒ์ ๊ฐ๋๋ฐ์์ง๋ง ํ์์ Xamarin Forms์ ๊ฐ์ฅ ํฐ ๊ฑธ๋ฆผ๋์ด๋ฉฐ ์ง๋ 3๋ ๋์ ์ ์๊ฒ ๊ฐ์ฅ ํฐ ๊ณ ํต์ ์๊ฒจ์ฃผ์์ต๋๋ค.
ํ์์ MasterDetail ํจํด์ด ์๋ ์ธ ํ๋ซํผ ๋ชจ๋์์ ์ผ๊ด๋์ง ์์ ํ๋ฒ๊ฑฐ์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผ์ผ ํ์ด์ง๋ฅผ ๋ชจ๋ฌ๋ก ํธ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ ์ ํ์ ๋ชจ์์ ๊ตฌํํด์ผ ํ์ง๋ง Android์์๋ ์ ๋๋ฉ์ด์ ์ด ๋์ฐํด ๋ณด์ ๋๋ค(์ฌ์ง์ด MD).
์ด์์ ์ผ๋ก๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์์ ์ ContentView๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ๋ชจ์์ ๋ด์ฉ์ ์ ํ ํด์ ํ๊ณ ์ฌ์ ์ํ ์ ์์ด์ผ ํฉ๋๋ค. PlatformSpecifics๋ ์๋ ๋๊ตฌ ๋ชจ์ ํญ๋ชฉ์ ์์น๋ฅผ โโ์ง์ ํ ์ ์๋ ๊ฒ์ผ๋ก ๋ ผ์๋์์ง๋ง(Bryan๊ณผ ์ด์ผ๊ธฐํ ๋) ์ ํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋์์ต๋๋ค.
ํ์ด์ง ํ์ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ ํ๋ ์์ํฌ ํญ๋ชฉ์ ์ฌ์ ์ํ๋ ๊ธฐ๋ฅ
์ ์๋ ๋ง์ ๊ฒ๋ค์ด ๋งค์ฐ ์ ์ฉํด ๋ณด์ ๋๋ค. ํน์ ํ์ด์ง์์ ๋จธํฐ๋ฆฌ์ผ ์ ธ์ ์ฌ์ฉํ ์ ์๊ณ ์ฑ ์ ์ฒด์ ์ ์ฉ๋์ง ์๋ ํ ์ฝ๋๋ ์ ๋ง ์ ์ฉํฉ๋๋ค. ํ์ฌ๋ก์๋ UX ๋ด๋น์์๊ฒ "Xamarin Forms์ ์ ํ ์ฌํญ์ ๋๋ค"๋ผ๊ณ ๊ณ์ํด์ ๋งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์คํ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๊ฒ์ ๋๋ค(์ด์ ์ญํ ์์ ํ๋ ๊ฒ์ฒ๋ผ). ๊ฐํ ๋งํ์ง๋ง, ์ด์ ์ Forms ์ฑ์ ์คํ์ผ์ ์ง์ ํ UX ๊ด์ ์์ ํผ๋๋ฐฑ์ ๋ฐ์์ผ ํฉ๋๋ค. XamlC์ฒ๋ผ ์ตํธ์ธํด์ผ ํฉ๋๋ค.
์ด๋ฆ์ ํ์คํ์ง ์์ง๋ง FlexShell์ด โโ๋ ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ ๋๋ค...ํ์ง๋ง ์ด์ Flexbox๊ฐ ์์ต๋๋ค.
๋ํ ์ด๊ฒ์ ํ ๋ง๊ฐ ์ฃฝ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น? ์ด์จ๋ ์ฌ์ฉํ์ง ์์์ต๋๋ค.
@๋งฅ์ผ์ธ
ํ์ฌ๋ก์๋ UX ๋ด๋น์์๊ฒ "Xamarin Forms์ ์ ํ ์ฌํญ์ ๋๋ค"๋ผ๊ณ ๊ณ์ํด์ ๋งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์คํ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๊ฒ์ ๋๋ค(์ด์ ์ญํ ์์ ํ๋ ๊ฒ์ฒ๋ผ).
์๊ฒ ์ต๋๋ค. ํ์ง๋ง ๋ฒ๊ทธ์ ์ ํ ์ฌํญ์ด ์๋ ์์ ํ ์๋ก์ด ๊ตฌํ์ ๋ง๋๋ ๋์ ํ์ฌ ๊ตฌํ์ ์์ ํ๊ฑฐ๋ ๊ฐ์ ํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด์ง ์์ต๋๊น? ๊ทธ๊ฒ์ ๋ฐ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค.
MaterialShell์ ์ด๋ค ์ ์์ ๋ ๋จ์ ์ธ API์ ๋๋ค."
์ง์งํ๊ฒ, Xamarin Forms๋ ์ผ๋ง๋ ๋ง์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์ต๋๊น? XF ํ์ ์ต์ํ Android ๋ฐ iOS์ ๋ํ ํ์ฌ XF ๊ตฌํ์ ์์ ํ๋ ๊ฒ์ ๊ฐ์ ํ ์ ์งํ ์ ์์ต๋๋ค. ๋ฒ๊ทธ ์์ , XAML ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์์ , ์ฑ๋ฅ์ ์ด๋ป์ต๋๊น?
ํฌ๋ก์ค ํ๋ซํผ ์๋ฆฌ๋ ๋ฐ ๊ทธ๋ผ๋์ธํธ ๋ธ๋ฌ์์ ๋ํ ๊ฐ๋จํ์ง๋ง ํจ์ฌ ์ ์ฉํ ์ง์์ ์ถ๊ฐํ์๋ ์ ์์ผ๋ก ๋๊ตฐ๊ฐ๊ฐ ์ ์ํ ํฐ์ผ์ด ์์์ง๋ง @jassmith์ ์๋ต์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค๋ ๊ฒ์ด์์ต๋๋ค. ํ์ง๋ง ์ด์ ์ด ํฐ์ผ์ ๊ฐ์ ๊ฒ์ ์ ์ํฉ๋๋ค.... ๋ ์ด์ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๊ทธ๋ฆผ์ ์ด๋
@opcodewriter
์, ์๋ฅผ ๋ค์ด Prism ํ์ ๋ฐฉํดํ๋ ํ์ ์ด์ ํ์์ด ์๋ ์ ์์๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
์ง๊ธ์ ๊ฑด์ค์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ค๊ณ ํ๋ ๊ฒ๋ฟ์ ๋๋ค. Xamarin Forms๋ ์งํ์ ์ค์ํ ์๊ธฐ์ ์์ต๋๋ค. ์ด API๋ ์ฑ ์ ์ฒด์ ์ ๊ทผ ๋ฐฉ์์ด ์๋ ์ ์ฐํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ ๊ฒฝ์ฐ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
@jassmith ๋ XF๊ฐ Shell์ ๋ํด Flutter ์ ๊ทผ ๋ฐฉ์(๋ค์ดํฐ๋ธ ์ปจํธ๋กค ๋์ ๋ ๋๋ง ์์ง ์ฌ์ฉ)์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
์ฌ๋ฌ๋ถ, ์ด์ Jason๊ณผ ์ ๋ ์ด ์ฌ์์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ์ผ๋ฉฐ ๋๊ท๋ชจ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์์ ์ด๋ฉฐ ์ด๋ฅผ ์ฌ๋ฌ ๋ฌธ์ ๋ก ๋ถํ ํ๊ณ ์์ต๋๋ค.
์์ ๊ฐ์ ์ค ์ผ๋ถ๋ฅผ ๋ํ์ดํ๊ณ ์ถ์ต๋๋ค. ๋ฌผ๋ก ๋ฌดํํ ์์์ด ์๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ๊ฒ์ ๊ฐ์ ํฉ์๋ค.
ListView ์์ (์์ง๋ ์ ๋๋ก ์๋ํ์ง ์๋๋ค๊ณ ๋ฏฟ๊ธฐ ์ด๋ ต์ต๋๋ค), CheckBox, RadioButton๊ณผ ๊ฐ์ ์ปจํธ๋กค ๊ตฌํ, ๋ธ๋ฌ์ ์ง์ ๊ตฌํ(SolidColorBrush, GradientBrush), ํ์ด์ง ๊ธฐ๋ฐ ํ์ ํ์ ๊ธฐ๋ฅ ๋๋ ContentView, ๋ฒ๊ทธ ์์ (ํฌ๋ช ํ ๋ณด๊ธฐ์ ๋ํด ๋ณด๊ณ ๋ ์ต๊ทผ ๋ฒ๊ทธ ์ฐธ์กฐ), ์ฑ๋ฅ, ๋๊ตฌ ๋ฑ....
์ ์๋ก์ด ์ผ์ ์์ํ๊ณ ์ถ์ต๋๊น?????
@TonyHenrique ์ ์ฌ์ง์ด ์ข์ ๊ฒ์ ๋๋ค. ๋ถํํ๋ ๋๋ ์์ ๊ฐ๊ฐ ์๋๋ฉฐ ๋ด๊ฐ ์ฐธ์กฐ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ์ด๋ฏธ์ง์ ๋ํ ๊ถ๋ฆฌ๋ฅผ ์์ ํ์ง ์์ต๋๋ค. ์ผ๋ถ ๋์์ธ ํ ๊ตฌ์ฑ์์ด ์ฌ์์ ์ ํฉํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ ์ค ์๊ฐ์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@muham
@ChaseFlorell ์๋์, ํ์ง๋ง ์ฌ์์ ์์ ์ฌํญ์ ์ฒจ๋ถํ๋ ค๋ฉด ์ ์์ ๋ฐ์ ์ ์์ต๋๋ค. Shell ๋ MaterialShell์ ๊ดํด์๋ ์์์ ์ธ๊ธํ์ต๋๋ค. 1๋จ๊ณ๋ MaterialShell์ด โโ์๋ฏธ๊ฐ ์๋์ง ํ์ธํ ๋ค์ ๊ธฐ๋ณธ ํด๋์ค๋ก ๋๋๋ ๊ฒ์ด 2๋จ๊ณ์ ๋๋ค.
@dylanberry ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. DrawingTemplates๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค. ์ต์ ์ ์ฑ๋ฅ์ ์ํด ํ๋ซํผ๋ณ ์ฝ๋์์ ์ด๊ฒ์ MaterialShell ์ธก๋ฉด์ ๊ตฌํํ๋ ค๊ณ ํฉ๋๋ค.
@RichiCoder1 ์ ์ค์ฒ๊ฐ ์ฌ๊ธฐ์ ์ฌ ๊ฒ์ด์ง๋ง ์์ ์ ํ์ ์์ญ ์ ์ค์ฒ๊ฐ ์๋ ๋ณด๊ธฐ๊ฐ CommandableSpan API์ ์ผ๋ถ๋ก ์ ๊ณต๋๊ณ ์ ์ค์ฒ๊ฐ ์๋ ๊ทธ๋ฆผ๋ ์ง์ํ๋๋ก ํ์ฅ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ค์ฒ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ๋ณธ ๋ฐฑ์๋๊ฐ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ฒ์ ํ์ฌ ์ด ์์ ์์ MaterialShell ์ฌ์๊ณผ ๊ด๋ จ์ด ์์ผ๋ฉฐ ๋ ์์ธํ ์ค๋ช ํ๊ฒ ๋์ด ๊ธฐ์๊ฒ ์๊ฐํ๋ Drawing ์ฌ์์ ์ํฉ๋๋ค. ๊ธธ๊ณ ์งง์ ๊ฒ์ DrawingTemplate์ด ์ค์ํ ์ด์ ๋ ๋ ๋๋ฌ๊ฐ ์ฌ๋ผ์ด๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ๊ธฐ๋ณธ ๋ฐฑ์๋์์ ์ ๋ ฅ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋ฌ ๋๋ฉด์ด ์๋ SliderDrawingTemplate์ ํฌํจํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๊ฒ์ ๋น์ ์ด ์ด๊ฒ์ ํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง ์์ผ๋ฉฐ, ๋ ๋๋ฌ๋ฅผ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ ๋จ์ํ ์ ํ ์ฌํญ์ผ ๊ฒ์ ๋๋ค.
@mackayn a Transitions/Segue API๊ฐ ๊ณง ์ถ์๋ ์์ ์ ๋๋ค. ๋๋ ์์ง ์ด๊ธฐ ์ ์์์ ์ด๋ฆ์ ์ง๋ ์ค์ ๋๋ค. ํ์คํ ํ์ด์ง ์ ํ๋ง ๋จ๊ณ 1์ ์๋ ๋จ๊ณ์์ ์ ๊ณต๋๋ ๋ฌด์ธ๊ฐ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ ์์ํฌ ์ ๋๋ฉ์ด์ ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์ตํธ์ธ์ ๊ดํด์. ์ ธ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฃจํธ์ฌ์ผ ํ๋ฉฐ TemplatedPage ์ธ์๋ ์ค์ฒฉํ ์ ์์ต๋๋ค. ์ฆ, ๋ด๋ถ ํต์ ํ ๋ง๋ 100% ํต์ ํ ์ ์์ต๋๋ค. ์ ํ ํ๋ฆฟ์ ์ผ๊ณ ๋๋ ๋ง๋ฒ์ ์ค์์น์ ๋ถ๊ณผํ๋ฉฐ ์ฐ๋ฆฌ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํด๋น ์ค์์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ด์ง, ๋ ์ด์์ ๋๋ ์ ์ด ์์ค์์ ํ ๋ง๋ฅผ ์ ํํ๊ฑฐ๋ ์ ํ ํด์ ํ ์ ์์ต๋๋ค.
@encrypt0r ์ ํํ์ง ์์ต๋๋ค. ํ์ด๋ธ๋ฆฌ๋๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ๋ ๋๋ง์ ํ์ฉํ์ง๋ง ํ๋ ์๋์์๋ ๋ชจ๋ ํ๋ซํผ๋ณ ์ปจํธ๋กค์ด ๋๋ก์ ์ฝ๋๋ก ํ ๋ง๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋ Ski์ ํ์ถ์ฉ ํด์น๊ฐ ์์ต๋๋ค(v1 ๊ทผ์ฒ์์ ๋ง๋ค์ด์ง๋์ง ์์ฌ์ค๋ฝ๊ธด ํ์ง๋ง).
@opcodewriter ListView2(์ค์ ๋ก ์ด๋ฆ์ด ์ง์ ๋์ง๋ ์์)๋ ๋ง์นจ๋ด ์ฌํด ๋ก๋๋งต์ ์์ต๋๋ค. ์ ์๋ก์ด ListView์ธ๊ฐ? ์๋ API๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์์ ํ ๊นจ๋จ๋ฆฌ์ง ์๊ณ ๋ ํจ๊ณผ์ ์ผ๋ก ๊ณ ์น ์ ์๋ ๊ฑฐ์ ๋ฌดํํ ์์ ๋ฒ๊ทธ์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค. Cell/ViewCell ๋ฐ ItemsView์ ๊ฐ์ ๊ฒ
๋ถํํ๋ ListView ์ ํ ์์ฒด ๋ด์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด ์๊ฐ๋์ง ์์ผ๋ฉฐ ์ปค๋ฎค๋ํฐ์์๋ ๋ถํํ๋ ๊ทธ๋ ๊ฒ ํ ์ ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ์ต์ ์ ์ ํ์ ListView๋ฅผ ์๋ ๊ทธ๋๋ก ์ ์งํ ๋ค์ ์ค๋ฒํค๋๊ฐ ์ ๊ณ ๋ถ๊ธฐ์ฅ์ด ์ ์ผ๋ฉฐ ์กด์ฌํ ํ์๊ฐ ์๋ ๋ ์ด์ํ ์ ํ์ผ๋ก ํจ์ฌ ๋ ๋งค๋๋ฝ๊ฒ ๋ง๋ค๊ณ ๋์ ํ๋ ์์ํฌ๊ฐ ์ต์ ์ ๋คํ๋ ๊ฒ์ ์ ๋ขฐํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ๊ฑฐ๋ํ backcompat ๋ณ๊ฒฝ ์ฌํญ์ด ๋ ์ด์ ์ฌํ์ฉ ์ ๋ต์ ์ ๊ฑฐํ๊ธฐ๋ง ํ๋ฉด Xamarin.Forms ์ฝ๋๋ฒ ์ด์ค์ ์๋นํ ๋ถ๋ถ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ListView2๋ ๊ฐ๋๋ ์ผ(๋๋ Cell์ ๊ฒฝ์ฐ 2๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ด๋ถ ํ๋ก์ ํธ์ ๋ถ์ ํ ํฉ๋ณ)์ด ๋๋๋ก ์๋๋ ์ด๋ฌํ ํญ๋ชฉ์ ์ ๊ฑฐํ์ฌ ๊ธ์์ ํจ์ฌ ๋ ๊ฐ๊น์ด ๋ค๊ฐ๊ฐ ์ ์๋๋ก ํด์ฃผ๋ฉฐ ์ด์ ๋ ๋ชจ๋์๊ฒ ํผํด๋ฅผ ์ค๋๋ค.
์ค๋๋ ์บ์ฑ ์ ๋ต์ ์ค๋๋ ์กด์ฌํ๋ ๋ชจ๋ ๋ ๋๋ฌ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ชจ๋ ๋ ๋๋ฌ๊ฐ ์์ ๋ณ๊ฒฝ์ ์ง์ํ๋ ์ด์ ์ ๋๋ค. ๊ทธ๊ฒ์ด ๋์ ์ต์ ์ ์ถ์ ์ ์ํด ์ฌ๋ผ์ง๋ฉด ํ๋ก์ ํธ์ ์๋ ๋ชจ๋ ์ฝ๋์ ์ฝ 10%๊ฐ ์ฌ๋ผ์ง๋๋ค. ์ ๋ง ํ๋ก์ ํธ์ ๊ฐ์ฅ ํฐ ์์ ๋๋ค.
@davidortinau ๊ทํ์ ์๊ฒฌ์ ๋๋ฌด ๋ฉ์ง ํ์์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ป์ ์ ์์ต๋๋ค!
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์ต์์ ์์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํ๊ฒ ๋ณด์ด๋๋ก ํ ๋ง๊ฐ ์๋ ์ฑ
- ๋จธํฐ๋ฆฌ์ผ ๋์์ธ(์ด ๊ฒฝ์ฐ) ๊ธฐ๋ณธ์ ์ผ๋ก ํจํด ์ผ์ง
- ๊ตฌ์ฑ์ผ๋ก ํ์ฑํ๋ ์ต์ ํ์ ํจํด
- iOS, Android ๋ฐ UWP์์ ๋์ผํ๊ฒ ๋ณด์ด๋๋ก ํญ๋ชฉ ๋๋ ๋ฒํผ์ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ ํ์๊ฐ ์์ต๋๊น?
์ ํํฉ๋๊น? ๊ฐ์กฐํด์ผ ํ ๋ค๋ฅธ ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ค ๋ง์ต๋๋ค. ๊ฐ์กฐํ ์ ์๋ ๋ค๋ฅธ ์ด์ ์ด ๋ง์ด ์์ง๋ง ์ผ๋จ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ๋ถ๋ช ํด์ง๋๋ค. ํ๋จ ์ํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก FAB๋ฅผ ์ฌ์ฉํ๊ณ URL์ ์ฌ์ฉํ์ฌ ํ์(์ ๋ฐ์ดํธ ์์ ) ๋ฑ โโํจ์ฌ ๋ ๋ง์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ฑ ๋์ MaterialShell์ด โโ์์ต๋๋ค. ์ด์ ์ ์ป์ผ๋ ค๋ฉด ์๋ก์ด ์ต์์ ์ ํ๋ฆฌ์ผ์ด์ ํจ๋ฌ๋ค์์ ํ์ต/์ฑํํด์ผ ํฉ๋๊น?
์๋ชป๋. ์ฑ MainPage๋ MaterialShell์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ ํ โโ์ฑ ๋ฃจํธ์ ๋๋ค.
๋ด ์ฑ์ ๋ค์ด๊ฐ๋ฉด ContentPage ๋๋๋ก ๋์๊ฐ๋๋ค. ๋ง์ต๋๊น? ๊ทธ๋ฌ๋ ๋ด ๋ชจ๋ ๋ฒํผ๊ณผ ํญ๋ชฉ์ ๋ฌผ์ง์ ์ด๋ฉฐ ์๋ฆ๋ต์ต๋๋ค.
์์์ ํ๋ฆฐ ๋ถ๋ถ์ ์ ์ธํ๊ณ ๋ ๋ง์ต๋๋ค.
์ฌ์ ํ OnPlatform ๋ฑ์ ์ฌ์ฉํ์ฌ ๋ชจ์(๋๋ ๋์)์ ๋ค๋ฅธ ํ๋ซํผ์์ ๋ค๋ฅด๊ฒ ํ ์ ์์ต๋๊น?
์.
๊ธฐ์กด ์ฑ์์ ์ด "์"์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๋ ์ด๋ป๊ฒ ๋ฉ๋๊น?
Google Play ์คํ ์ด ์ฌํ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ณ ๋ชจ๋ ์ฑ์ ํ์ฌ ํ์ด์ง๋ฅผ ๊ฑฐ๊ธฐ์ ๋ฃ๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ์ด๊ฒ์ ์ฑ์์ Nav/Tab/MD ํ์ด์ง๋ฅผ ์ง์ ์ฌ์ฉํ๋ ์์ญ๋ง ๋์ฒดํฉ๋๋ค. ContentPages์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์๋ก์ด MaterialShell์ ์๊ฐํ๊ณ ์ฑ์ ๊ตฌ์กฐ์ ๋ชจ์์ ์ค๋ช ํ๊ณ ์๋ก์ด ์ฅ์ ์ ๋ณด๊ธฐ ์ํด ์คํํฉ๋๋ค.
๋น๊ณ
ํ๋ผ์ด์์ ๋๋ ๋ฉ๋ด ํญ๋ชฉ์ ๋ชจ์์ด ๋ง์์ ๋ค์ง๋ง ๋์์ด๋ ๊ตฌ์ฑ ์์์ ๋ง๊ฒ ์กฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ต์ ์ ๋ฌด์์ ๋๊น?
ํค๋, ํค๋ ์ถ์ ๋ฐ ์จ๊ธฐ๊ธฐ ๋ฐฉ๋ฒ์ ์์ ํ ์ ์ดํ ์ ์์ต๋๋ค. ํ๋ผ์ด์์์์ ๊ฐ "์ "(์ ์ด ์๋)์ ๋ชจ์/๋๋์ ์์ ํ ์ ์ดํฉ๋๋ค. ๊ฑฐ๊ธฐ์ ์๋ ๊ฐ ๊ทธ๋ฃน์ ํค๋๋ ์์ ํ ์ ์ดํ ์ ์์ต๋๋ค. ์ฌ์ค์ ๋ชจ๋ ๊ฒ์ "๋ชจ์"์ ์ ์ดํ์ง๋ง ์ถ๊ฐ ์ฝํ ์ธ ๋ฅผ ๋ฐฐ์นํ ์ ์๋ ๋ช ๊ฐ์ง ์ถ๊ฐ ์์น๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด๋ ์์ ์์ "์ด ๋ชจ๋ ๊ฒ์ ์ค์ค๋ก ๋กค๋งํ์ด์ผ ํ๋ค"๊ณ ๋งํ๊ณ ์๋ ๊ฒ์ ํ์ค Xamarin.Forms ์ฑ ๊ตฌ์กฐ๋ก ์ฎ๊ธฐ๊ณ ์์ต๋๊น?
Google Play ์คํ ์ด ๋ฌผ๋ฆฌ์ ๋ ์ด์์ ํ๋ผ์ด์์์ด ์ํ๋ ๊ฒ๊ณผ ์์ ํ ๋ค๋ฅด๊ฒ ๋ณด์ด๋ ๊ฒฝ์ฐ. ์ฝ๊ฐ ๋ค๋ฅด์ง ์๊ณ ์์ ํ ๋ค๋ฆ ๋๋ค.
MaterialShell์ ์์ ํ ํฌ๊ธฐํด์ผ ํ๋ ๊ฒฝ์ฐ ์คํ์ผ ์ง์ ์ ๋ชจ๋ ์๊ฒ ๋๋ฉฐ iOS์ Android ๋ฐ UWP ๊ฐ์ ์๋นํ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ณด๊ณ ์์ํ๋ ๊ณณ(์ค๋์ฒ๋ผ)์ผ๋ก ๋์๊ฐ๋๊น? ํ์ง ์์์ผ๋ฉด ํฉ๋๋ค.
No MaterialShell์ ์์์ด ๊ฐ์ ธ์ค๋๋ก ์ผ๋ถ ๊ธฐ๋ณธ ๋ฆฌ์์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ์ค์ค๋ก ํ ์ ์์ ๊ฒ์ ๋๋ค. ์ด์จ๋ ํด์ผ ํ ์๋ ์์ง๋ง ์ค์ ๋ก MaterialShell์ด โโ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ๋๋ก ์ฝ์ํ์ง ์์์ต๋๋ค. ์ตํธ์์ ๋์ ์ตํธ์ธ์ผ๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ํ์ ํธ๋ฆฌ์ ๋ํ ๋จ์ผ API ํธ์ถ์ด ๋ฉ๋๋ค.
์ ๊ฐ ์์ํ๋ ์ ํ์ ์ด ์์ต๋๋ค. ๋น ๋ฅด๊ฒ ์งํํ๊ธฐ ์ํด ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ํ์๋ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ ๋๋ฌํ๊ณ ๋ด ์ต์ ์ ํ์ํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ฌด์์ด๋ฉฐ ์ด๋ค ์์ ์์ MaterialShell์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น?
์๋๋ ์์ด ์๋ ๊ฒ์ด ๋ ๋์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. Material์ ์ํ์ง ์์ ์๋ ์์ง๋ง ํญ์ Shell์ ์ํด์ผ ํฉ๋๋ค(๋ค์ Shell ๊ธฐ๋ณธ ํด๋์ค๊ฐ ์ ๊ณต๋ฉ๋๋ค). ์์? ์ ธ์ ๋ชจ์/๋๋์ ํจ์ฌ ๋ ๊ตฌ์ฑํ ์ ์๊ณ ํ์ ์คํ ๋ฆฌ๊ฐ ํจ์ฌ ๋ ํตํฉ๋๋ฉฐ ์ ธ์์ ํ ์ ์๋ ๋ค๋ฅธ ํ์ด์ง์์ ํ ์ ์๋ ์ ์์ ์ธ ์ผ์ ์์ด์ผ ํฉ๋๋ค.
๋ ๋์ ์ ์ Shell ๋ ๋๋ฌ๊ฐ ์ค์ ๋ก ์ฝ๊ฒ ๊ตฌ์ฑ๋๊ณ ์ ์์ธ์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋ง๋ฒ์ ํ๋ ํด๋์ค๋ ์๊ณ , ์ฐ๋ฆฌ๊ฐ ํ๋ ๋์ค(hard deps)๋ฅผ ์ฌ์ฉํ๋ ์ปค์คํ ๋ค์ดํฐ๋ธ ๋ทฐ ์๋ธํด๋์ค๋ ์๋๋๋ค. ๊ฐ๋ฅํ ํ ๋ ๋๋ฌ์ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ต์ฒดํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒํ๋ฉด ์ํ๋๋๋ก ์๋ํ์ง ์์ผ๋ฉด ์ค์ ๋ก ์์ ํ ์ ์์ต๋๋ค ...
์ ์ฐ๋ฆฌ๋ ์ฒ์์ ๊ทธ๊ฒ์ ํ์ง ์์์ต๋๊น? ์ด์ฐฝ๊ธฐ์๋ ๋์์ธ ๋ชฉํ๊ฐ ์๋์๊ณ ๊ฒฐ๊ตญ ๊ฒฐํผํ๊ฒ ๋์์ต๋๋ค... ์ด๊ฒ์ ์ถฉ๋ถํ ํฌ๊ณ ์๋กญ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ ์ค์๋ฅผ ๊ฐ์ง๊ณ ๋ค๋ ํ์๊ฐ ์์ต๋๋ค.
@opcodewriter
์ง์งํ๊ฒ, Xamarin Forms๋ ์ผ๋ง๋ ๋ง์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์ต๋๊น? XF ํ์ ์ต์ํ Android ๋ฐ iOS์ ๋ํ ํ์ฌ XF ๊ตฌํ์ ์์ ํ๋ ๊ฒ์ ๊ฐ์ ํ ์ ์งํ ์ ์์ต๋๋ค.
๋ฒ๊ทธ ์์ , XAML ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์์ , ์ฑ๋ฅ์ ์ด๋ป์ต๋๊น?
^^ ์ด
@migueldeicaza
์ฌ๋ฌ๋ถ, ์ด์ Jason๊ณผ ์ ๋ ์ด ์ฌ์์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ์ผ๋ฉฐ ๋๊ท๋ชจ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์์ ์ด๋ฉฐ ์ด๋ฅผ ์ฌ๋ฌ ๋ฌธ์ ๋ก ๋ถํ ํ๊ณ ์์ต๋๋ค.
Miguel, ์ด๊ฒ์ ๋ถ๋ช ํ ํฐ ์ผ์ด ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ๋์ ํ์ฌ ๋งํ ์๋ ์์ง๋ง ์ฐ๋ฆฌ ํ์ ์์ ์ฑ, ์ฑ๋ฅ ๋ฐ ์ ์ฐ์ฑ์ ์ธ ๊ฐ์ง๋ฅผ ์ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ๊ทธ ์์ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฑ์ด ์ํํ๊ฒ ์คํ๋๊ธฐ๋ฅผ ์ํ๊ณ "์ฃ์กํฉ๋๋ค. ์ฐ๋ฆฌ ํ๋ซํผ์์๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค"๋ผ๊ณ ๋งํ์ง ์๊ณ UI/UX ๋์์ด๋๊ฐ ์ ๊ณตํ๋ ๋์์ธ์ ๊ตฌํํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด ์ฌ์์ ๊ทธ ๋ชฉํ์ ๋ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ์์ ์ ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ํฌ์ ํด์ผ ํ๋ฏ๋ก ๋ฆฌ์์ค๊ฐ ์์ ์ฑ, ์ฑ๋ฅ ๋ฐ ์ ์ฐ์ฑ์ ํ๋ณดํ ์ ์๋ ์ฌ์ ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ด xamarin ํ์์ผ๋ก ๊ฐ๋ฐํ๋ ์๋ก์ด ๊ธฐ๋ณธ ๋์/๋ฐฉ๋ฒ์ ๋๊น? ์๋๋ฉด ์ฌ์ ํ ๊ฐ ํ๋ซํผ๋ณ ๋ชจ์๊ณผ ๋๋์ผ๋ก ์ฑ์ ๋น๋ํ ์ ์๋ ์ต์ ์ด ์์ต๋๊น?
@DanielCauser ์ฅ๊ธฐ์ ์ผ๋ก ์ด๊ฒ์ด "๊ธฐ๋ณธ" ๋ฐฉ์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด๊ฒ์ด ํ์ฌ ๋ฐฉ์์ ๋์ฒดํ์ง๋ ์์ต๋๋ค. ์ฌ๋๋ค์ด ํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ผ๋ก ๋ง๋ค๊ณ ์๋ ํจ์ฌ ๋ ๋ง์ ์ ธ์ ์ ๊ณตํ๋ ๋ ํตํฉ๋๊ณ ํ๋์ ์ธ ๋ฐฉ๋ฒ์ผ ๊ฒ์ ๋๋ค. ๊ฒ๋ค๊ฐ ์์ ๋จ์ผ ์ปจํธ๋กค๋ก ์ ๊ณตํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ง๊ณ ๋ฐฐ์น๋๋์ง์ ๋ํด ๋ง์ด ์ต์ ํํ ์ ์์ต๋๋ค. ๋ ์ด์ ์ ธ์ ๋ํ 3๊ฐ์ ๋๋ก์ ํจ์ค๊ฐ ์์ต๋๋ค.
์ ์ํ๋ ๊ฐ์ ์ฌํญ์ด ๊ธฐ๋ณธ Xamarin Forms ์ฝ๋์ ๊ฐ์ ์ฌํญ์ ํตํด ์ด๋ฃจ์ด์ง๋ค๋ ์ ์ ํ์ ์ ๋ ์ด ์์ด๋์ด์ ์ ์คํ๊ฒ ์ฐฌ์ฑํฉ๋๋ค. ์ด๊ฒ์ด Forms ์์ ๋ ๋ง์ ๋ณต์ก์ฑ์ ์ถ๊ฐํ๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค.
๋ด ๋์ ์ํด ํ์ฌ๋ณด๋ค ๋ ์ ์ฐํ๊ณ ๋น ๋ฅด๋ฉฐ ์์ฑ๋ Forms๋ฅผ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํจ์ฌ ์ ํธํฉ๋๋ค. ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ์ ์๋ ๋ชจ๋ ์ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์์ ์ง์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ DIY๋ Xamarin์์ ์ ๊ณตํ๋ ์ผ๋ฐ ๋๊ตฌ ํคํธ๋ณด๋ค ๋์ ๋ด ๊ณ ๊ฐ์๊ฒ ๋ ์ ๋ง์ ๊ฒ์ด ๊ฑฐ์ ํ์คํฉ๋๋ค. ๋ช ๊ฐ์ง ์ฃผ๋ชฉํ ๋งํ ์์ธ๋ฅผ ์ ์ธํ๊ณ ์ด ์ ์์ ๋ด๊ฐ ํ์ฌ ์ง๋ฉดํ๊ณ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค.
@jassmith
์ง๊ธ ์์ ํ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์์ ์ ์์ํ๋ ค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋จผ์ ์์ ๋ด์ฉ์ ์ด์ ์ ๋ง์ถ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด์ง ์์ต๋๊น?
ListView์ ๊ด๋ จ๋ ์์ ๊ทํ์ ์๊ฒฌ์ ๋ํด: ์์ ํ ์ฌ์ค๊ณ\๊ต์ฒดํ๋ ๊ฒ์ ํฌํจํ์ฌ ๋ชจ๋ ์ข ๋ฅ์ ๋๋ดํ ์ฑํ์ ๋ฐ์๋ฅผ ๋ณด๋ ๋๋ค. Xamarin Forms์์ ๋ชจ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ์ข์ ๊ฒ์ ์๋๋๋ค. ๊ฑด๋๋ ค์๋ ์ ๋ฉ๋๋ค.
@opcodewriter
1) ๋ค ์์ต๋๋ค. ๋๋ ๊ทธ ๋ฌธ์ ์ ๋์ํ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ถ์งํ๋ ์ฐ์ ์์ ์์ ํญ๋ชฉ์ ๊ณ์ํ ๊ฒ์ ๋๋ค.
2) Android์์์ ์ฑ๋ฅ์ ์ด์ ๋ํ ์๋๋ ฅ์ ์ผ๋ถ์ ๋๋ค. ์ด๊ฒ์ ํ๋ ์์ํฌ๊ฐ ํ์ด์ง ์ ํ์ ์ํ ๋ ๋ง์ ํค๋์ ์๊ฐ์ ์ ๊ณตํ๋ฏ๋ก JIT ์๊ฐ๊ณผ ๊ฐ์ ๊ฒ์ ์จ๊ธธ ์ ์์ต๋๋ค. ํจ์ฌ ๋ ์ง๋ฅ์ ์ผ๋ก ํ์ด์ง๋ฅผ ์ฌ์ ์ ๋ก๋ํ๊ณ ์ ์งํ ์ ์์ต๋๋ค. XF ํ์ด ํด๊ฒฐํ ์ ์๋ ๊ฒ์ ์ ์ฒด JIT ์๊ฐ์ ๋๋ค. AOT๊ฐ ํ์ฑํ๋ Android์์ ์ฑ์ ์คํํ๊ณ ํจ์ฌ ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ ์ ๊ฐ ๋์๋๋ฆด ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
3) ์ฌ๊ธฐ์๋ ๋ ผ์์ด ์์ต๋๋ค.
์ง๊ธ ์์ ํ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์์ ์ ์์ํ๋ ค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋จผ์ ์์ ๋ด์ฉ์ ์ด์ ์ ๋ง์ถ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด์ง ์์ต๋๊น?
์ด ์์ ์ ์์ ๋์ด ์์ง ์์ผ๋ฉฐ ์ฌ๊ธฐ์์ ์ฌ์์ ๋ํด ๋ ผ์ํ๊ณ ์์ต๋๋ค. ๋์ ๊ฒฝ์์ง์ ๋์ ์กฐ์ธ์ ๋ฐ๋ผ ์ ์ ํ๋ค๊ณ ์๊ฐ๋ ๋ ์ผ์ ์ ์ก์ ๊ฒ์ ๋๋ค.
ListView์ ๊ด๋ จ๋ ์์ ๊ทํ์ ์๊ฒฌ์ ๋ํด: ์์ ํ ์ฌ์ค๊ณ\๊ต์ฒดํ๋ ๊ฒ์ ํฌํจํ์ฌ ๋ชจ๋ ์ข ๋ฅ์ ๋๋ดํ ์ฑํ์ ๋ฐ์๋ฅผ ๋ณด๋ ๋๋ค. Xamarin Forms์์ ๋ชจ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ์ข์ ๊ฒ์ ์๋๋๋ค. ๊ฑด๋๋ ค์๋ ์ ๋ฉ๋๋ค.
ListView๋ ์ง์ ์ผ๋ก Xamarin.Forms์ ๋ฒ๊ทธ ๊ณฐ์ ๋๋ค. 500๊ฐ์ ๋ฌธ์ ์ค 220๊ฐ๊ฐ ๋ฒ๊ทธ๋ก ํ์๋์ด ์์ผ๋ฉฐ(๋ง์ ํ์ฐ์คํคํ ๋๋ ๊ฐ์ ๋ฌธ์ ๋ ์์) 25% ์ด์์ ๋ถ์ชฝ์ ListView์ ๊ด๋ จ์ด ์์ต๋๋ค. ๋น๊ต๋ฅผ ์ํด ์ ์ฒด UWP ํ๋ซํผ๊ณผ ๊ด๋ จ๋ ๋น์จ๊ณผ ๊ฑฐ์ ๊ฐ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ธฐ ํ ๋ ๋๋ฌ๊ฐ ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ์ค๋ช ๋๋ Android์ ๋ ๋์ ์๋ ListView ๋ฒ๊ทธ์ด๊ธฐ๋ ํ์ง๋ง ListView๊ฐ ๊ฒ์ ์ฟผ๋ฆฌ์ ์๋ฌด๋ฐ๋ ํ์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ด ๊ฒ์์ ํ์๋์ง ์์ ๊ฒ์ ๋๋ค.
@jassmith๋ ๊ธฐ์กด ๋ฌธ์ ๋ฅผ ์์ ํ๋ ๊ฒ
- ์ง์ ํ ํ์
์ง์(๊ธฐ๋ณธ ๋ฐ ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ์ ํ โโ์์)
- ๋ค๋ก ํ์ํ ๋ ํ์ด์ง ํ์ ์ทจ์(์ค๋ ๋ฏธํด๊ฒฐ ๋ฌธ์ )
- ๊ธฐ๋ณธ ์ปจํธ๋กค ๋๋ฝ(CheckBox, RadioButton ๋ฑ ์์)
- ํฌ๋ก์ค ํ๋ซํผ ๋๋ก์(์บ๋ฒ์ค ์ปจํธ๋กค ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ)
- ์๋ฆฌ๋\๊ทธ๋ผ๋์ธํธ ๋ธ๋ฌ์์ ํ๋ซํผ ๊ฐ ๊ทธ๋ฆฌ๊ธฐ ์ง์(SolidColorBrush, GradientBrush)
ํ๋ ์์ํฌ๋ฅผ ๋ ํ๋ถํ๊ฒ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๋ ๋ง์ ์์ ์ด ์ํ๋๊ณ CSS ์คํ์ผ์ด๋ Flexbox(์์ฒด ๋ฌธ์ ์ ํจ๊ป ์ ๊ณต๋จ)์ ๊ฐ์ ํญ๋ชฉ์ ์ถ๊ฐํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@opcodewriter
์ง์ ํ ํ์ ์ง์(๊ธฐ๋ณธ ๋ฐ ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ์ ํ โโ์์)
๊ณตํํ๊ฒ, ํ์ค์ด ๋ ๋งํผ ๋์ ์ฐ์ ์์๋ฅผ ์ป์ง๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ ์ค์ ๋ก ์ด๋ ์์ ์์ ๊ฝค ๋ง์ด ์งํ๋์์ต๋๋ค.
๋ค๋ก ํ์ํ ๋ ํ์ด์ง ํ์ ์ทจ์(์ค๋ ํด๊ฒฐ๋์ง ์์ ๋ฌธ์ )
์ด๊ฒ์ ์ค์ ๋ก MaterialShell์ด โโํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด NavigationPage์์ ์ํ๋ ์ ์๋ ๊ฝค ํ์คํ ์ด์ ๊ฐ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ปจํธ๋กค ๋๋ฝ(CheckBox, RadioButton ๋ฑ ์์)
์ด๋ค ์ค ์ผ๋ถ๋ ํ์ฌ ์งํ ์ค์ธ F100 ์ด๋์ ํฐ๋ธ์ ์ผ๋ถ์ ๋๋ค.
ํฌ๋ก์ค ํ๋ซํผ ๋๋ก์(์บ๋ฒ์ค ์ปจํธ๋กค ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ)
์ด๊ฒ์ #2452์ ๋ช ์๋ ๊ฒ๊ณผ ๊ฐ์ด ์ด๊ฒ์ ๋ํ ์๋งค API๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋จ์/๊ทธ๋ผ๋์ธํธ ๋ธ๋ฌ์์ ํ๋ซํผ ๊ฐ ๊ทธ๋ฆฌ๊ธฐ ์ง์(SolidColorBrush, GradientBrush)
์์ ๊ฐ์ ๋ต๋ณ์ ๋๋ค.
@jassmith
๊ณตํํ๊ฒ, ํ์ค์ด ๋ ๋งํผ ๋์ ์ฐ์ ์์๋ฅผ ์ป์ง๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ ์ค์ ๋ก ์ด๋ ์์ ์์ ๊ฝค ๋ง์ด ์งํ๋์์ต๋๋ค.
์ข์ต๋๋ค. 2018๋ ๋ง๊น์ง ์ฐ์ ์์๋ฅผ ์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. :)
์ด๊ฒ์ ์ค์ ๋ก MaterialShell์ด โโํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด NavigationPage์์ ์ํ๋ ์ ์๋ ๊ฝค ํ์คํ ์ด์ ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ด ํ์ฌ ๊ตฌํ์์ ์ํํ ์ ์๋ ์ด์ ๋ฅผ ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
์ด๋ค ์ค ์ผ๋ถ๋ ํ์ฌ ์งํ ์ค์ธ F100 ์ด๋์ ํฐ๋ธ์ ์ผ๋ถ์ ๋๋ค.
์ ๊ฒ ์ด์. ์๊ฐ๋ฝ์ด..
์ด๊ฒ์ด ํ์ฌ ๊ตฌํ์์ ์ํํ ์ ์๋ ์ด์ ๋ฅผ ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
์ฐ๋ฆฌ๊ฐ ํธ๋์์ ํฌ๊ฒ ๋ฒ์ด๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋ ์์ธํ ๋ค๋ฃจ์ง๋ ์๊ฒ ์ง๋ง ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์คํ์ผ๋ง์ ๋ฏธ์น๋ ์ํฅ๊ณผ ๊ด๋ จํ์ฌ ๋ค๋ฅธ ์ฌ์ํ ์ฐ๋ ค๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธด ์ด์ผ๊ธฐ๋ ์งง์ต๋๋ค. ์ด ํน์ ๊ธฐ๋ฅ์ ๋ํด ์ฌ์ ํ ๋ ผ์ํ๊ณ ์ถ๋ค๋ฉด ์ ํธ๋ฅผ ์ฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. :)
@jassmith
๋ ๊ทธ๋ฅ ์ฒ๋ฆฌ ์๊ฐํ๋ค gestureRecognizerShouldBegin
๊ฐ์ ๋ฐ ์ ํ ๋ญ๊ฐ OnBackButtonPressed
์ถฉ๋ถํฉ๋๋ค.
์ ๋ฐ์ ์ผ๋ก ๋๋ ๋ด๊ฐ ์ฝ๊ณ ์๋ ๋ง์ ๊ฒ์ ์ ๋ง๋ก ์ข์ํ์ง๋ง ์ด๊ฒ์ ํต์ฌ Xamarin Forms nuget/repo์์ ์ํ๋์ด์ผ ํ๋ ๊ฒ๊ณผ ๊ฐ์ง ์์ต๋๋ค.
์ด๊ฒ์ Xamarin Forms์ ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ์์ ๊ตฌ์ถ๋์ด์ผ ํ๋ ๋ ๋จ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ ๋ ์ด๊ฒ์ ๊ฐ๋ฐ์๊ฐ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ ์ ์๋๋ก ํ๋ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ด ๋๋ค. ๋ ธ์ถํด์ผ ํ๋ Xamarin Forms์ ํ์ ๋ถ๋ถ์ด ์์ด์ผ ํ๋ฉฐ ์ด๋ ํด๋น ๋นํธ ์์ ๋น๋๋์ด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์๊ฐ Xamarin Classic/Native ๋๋ Xamarin Forms๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก Xamarin Forms ๋๋ Xamarin Forms with Shell์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๊ฒฐ์ ์ ๋ณผ ์ ์์ต๋๋ค.
Xamarin Forms๋ ํ๋ซํผ์ ์๋ก ๋ฎ๋๋ก ๋ง์ถ๋ ค๊ณ ํ์ง ์๊ณ ์ต๊ณ ์ ํฌ๋ก์ค ํ๋ซํผ UI ํ๋ ์์ํฌ๋ฅผ ๋ง๋๋ ๋ฐ ์ค์ ์ ๋์ด์ผ ํฉ๋๋ค. ์ค๋๋ Xamarin Forms๋ ํ๋ซํผ ๋๋์ด ์กด์ค๋๋๋ก ํ๋ ํ๋ฅญํ ์์ ์ ์ํํฉ๋๋ค.
๊ธฐ๋ณธ ์ ธ์ด Xamarin Forms ๋ฆฌํฌ์งํ ๋ฆฌ์ ์๊ณ ์ ธ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ผ๋ถ ์ฝ๋๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์ง๋ง Material Shell์ด โโํน์ ๋์์ธ ์ธ์ด ๋ฐ ํ์ ํจํด์ ๋๋ฌด ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋์ด ์์ด Xamarin Forms ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ๊ธฐ์๋ ์ด๋ ต์ต๋๋ค.
@MisterJimson
์๊ฒฌ์ ๋ณด๋ด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๊ณต๊ฐ API ๋
ธ์ถ ์์ญ์ ์ ํํ ์์น๋ ์์ง ๊ฒฐ์ ๋์ง ์์์ต๋๋ค. ๋ ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
์ฌ์์ Shell๊ณผ MaterialShell ํด๋์ค๋ฅผ ๋ชจ๋ ํฌํจํ๋๋ก ์ ๋ฐ์ดํธ๋ ์์ ์ ๋๋ค. MaterialShell ํด๋์ค๋ ํต์ฌ์์ ๋ฒ์ด๋๋ ๊ฒ์ ๊ณ ๋ คํ๋ ๋ถ๋ถ์ ๋๋ค. Shell์ ๊ทํ๊ฐ ์ค๋ช ํ ๊ฒ์ ๋๋ค.
Shell breakout ๋ฐ ํ์ ์ฌ์ ์ ๋ฐ์ดํธ๋ก ์ ๋ฐ์ดํธ๋จ
๊ธฐ์กด XF ๊ตฌํ์ด ๋ง๋ค์ด์ง๋ฉด ์ ๋ง ์ข๊ฒ ์ต๋๋ค. BCL์ ์ผ๋ถ๊ฐ ์๋ ์ ๋์จ์ผ๋ก ์ด์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ๋ ๊ฐ๋ ฅํ๊ณ ๋ ์ข์ต๋๋ค. ๋ฐ๋ผ์ ์ ํํ๊ณ ์์ ์ ์ธ ๊ฐ๋ ฅํ ๊ธฐ๋ฐ ํ๋ซํผ์ ๋ณด์ ํ๋ฉด ๊ธฐ์กด ์ฑ๊ณผ ์ด์ ๊ฐ์ ์๋ก์ด ๊ณ์ธต์ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ด ๋ฌผ๊ฑด์ ๋ฐ์ ์ ๊ธฐ๋ํฉ๋๋ค.
@jassmith @brianlagunas
๋จ์ง ๋ช ๊ฐ์ง ๊ด์ฐฐ.
๋๋ ๋จ์ง ๊ธฐ์กด์ ๋ฌธ์ ์ ๊ณผ ํ๊ณ๊ฐ ํด๊ฒฐ๋ ๋ฟ๋ง ์๋๋ผ ์๋ก์ด ๊ธฐ๋ฅ์ด ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ์ถ๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
์ ๋ค๋ฆฐ๋ค.
์ ๋ XF๋ฅผ ์ฒ์ ์ ํ์ง๋ง ํ๋ ์์ํฌ๋ ๋ค์ ์ทจ์ฝํ๋ค๋ ํํ์ ์ป์์ง๋ง ํ์คํ ์ด๊ฒ์ ์ฌ๋ฌ๋ถ์ ๋ ธ๋ ฅ ๋๋ถ์ ๋น ๋ฅด๊ฒ ๊ฐ์ ๋๊ณ ์์ต๋๋ค.
๊ทธ๋์ ๊ทธ๊ฒ์ด ๊ฐ์น์๋ ๊ฒ์ ๋ํด ์ด๊ฒ์ ๋ด ์๊ฒฌ์ ๋๋ค :-)
๋ํ, ๊ธํ ๋ฐ ๊ธฐ์ ์ ๋ถ์ฑ ์ํ๊ณผ ํจ๊ป ํ ์์๋ ํ๋ ์ ์ํฌ๋ฅผ ๋ชจ๋ ์ ๋ง๋ฆฐ ์๊ฐ์ ๋ง์ ์ฌ๋์ ๋ฐ๊ณ ํ์ง๋ง @opcodewriter์ ๋์ํ๋ ๊ฒ์ด ์ข์์.
๋๋ ๋ํ ์ด๊ฒ์ด ๋ค๋ฅธ ๊ณ์ธต์ด์ด์ผ ํ๋ค๋ @MisterJimson ์ ์๊ฐ์ ์ข์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ ๋น์ ์ ๋ฅ๋ ฅ๊ณผ ์ผ๋ง๋ ๋ง์ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ ์ ์๋์ง์ ๋ํด ์ค์ค๋ก์๊ฒ ์ ์งํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ์๋กญ๊ณ ๋ฐ์ง์ด๋ ๊ฒ๋ค์ ์ฝ๋ฉํ๊ณ ์ด๋ ค์ด ๊ฒฐ์ ์ ํผํ๋ ๊ฒฝํฅ์ด ์์ง๋ง, ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ ์ฝ๋์ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋น์ ์๊ฒ ์์กดํฉ๋๋ค.
๋ค๋ฅธ ์ฌ๋์ ์ฝ๋์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๋ด ์ฝ๋๋ฅผ ์๋์ํค๋ ๋ฐ ์ถฉ๋ถํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค :-)
XF๋ ํ์ฌ ์ข์ ์์น์ ์์ผ๋ฉฐ ์ ๋ง ๊ฒฌ๊ณ ํ ๋๊ตฌ ์ธํธ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ๋ชจ๋ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@๋งฅ์ผ์ธ
BackButtonBehavior, ์ ํ ์ํ์ง ์๋ ๊ฒฝ์ฐ์ ๋๋นํ์ฌ ๊ฐ์์ฑ ์์ฑ์ด ์์ด์ผ ํฉ๋๊น?
CanExecute๊ฐ false๋ฅผ ๋ฐํํ์ฌ ๋ช ๋ น์ ์ค์ ํฉ๋๋ค. ๋๋ ์ ์ ๋์ ๋ณด์กฐ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
Materialshell ํ์ ์ฒด๊ณ๋ Prism๊ณผ ๋น์ทํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์กด ํ๋ ์์ํฌ์์ ์๋ํฉ๋๊น? (ํ๋ฆฌ์ฆ, FreshMVVM, MVVMCross)
๋๋ ํ์คํ ๊ทธ๋ ๊ฒ ๋ฐ๋๋๋ค! ํ์ ํ ์๋ ์์ง๋ง ๋๋ ๊ทธ๋ค๊ณผ ๊ทธ๋ค์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์๊ฐํ๊ณ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ํ์์ด ๋จ์ผ ์ด๋ฒคํธ๋ฅผ ํตํด ๋ฐ์ํ๋ ์ด์ ์ ๋๋ค.
ํ์ ๋ชจ์์์ ๋ ์ด์์์ ์์ ํ ์ฌ์ ์ํ ์ ์์ต๋๊น? ๊ทธ๋๋ก Forms๋ ์ด์ ๊ด๋ จํ์ฌ ๋งค์ฐ ์ ํ์ ์ด๋ฉฐ ์๋ก์ด ๋ฒ์ ์ Forms๊ฐ ์ฌ์ฉ์ ์ ์ ์ฝ๋๋ฅผ ์์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ์ฌ์ค์ ์๊ณ ์์ ํ๊ฒ ์ฌ์ฉ์ ์ง์ ๋ ๋๋ฌ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ก ํ๋ ํฌ๋ฐํ ํ์ ๋ชจ์์ผ๋ก ๋๋ฉ๋๋ค.
์ด ๋ถ๋ถ์ด ๋ ์ด๋ ต์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ฐ๋ฅํ ํ ๋ง์ ํ์ฅ์ฑ์ ํ์ฉํ๊ณ ์ถ์ง๋ง ์ด ๊ธฐ๋ฅ์ ์ ์ ์ ์ด๊ณ ํฉ๋ฆฌ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ ์ ๋ง ์ด๋ ค ์์ต๋๋ค.
MasterDetail์ ๋ง์ด ๋ค๋ฃจ์ง ์์ต๋๋ค. ํ๋ผ์ด์์ ๋ฉ๋ด๋ฅผ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๊น?
ํค๋๋ฅผ ์์์ ๋ณด๊ธฐ๋ก ์ค์ ํ๊ณ , ๊ทธ๋ฃน ํค๋ ๋ฐ ํญ๋ชฉ์ ์ฌ์ฉ๋๋ ํ ํ๋ฆฟ์ ์ ์ดํ๊ณ , ๋ฉ๋ด ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ ์ด์์์ ์ผ๋ถ ์ธก๋ฉด์ ์ ์ดํ์ง๋ง 100%๋ ์๋๋๋ค. ๋ค์ ํ ๋ฒ ๋น์ ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ํด ๋ช ๊ฐ์ง ์๊ฐ์ ํด๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ๋ฐ๋ฅ๊ธ ๋์ ์์ฑ์ด ์๋ ๋ฐ๋ฅ๊ธ์ ํ์์ฑ์ ๋ถ๋ช ํ ์๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ๋ฒ๊ฑฐ์ ๋ํด ์ด๋ค ํต์ ๊ถ์ ๊ฐ๊ฒ ๋ ๊น์?
BackButtonBehavior๋ ํ๋ฒ๊ฑฐ๋ ์ฌ์ ์ํฉ๋๋ค. ์๋ง๋ ์ด๋ฆ์ ๋ฐ๊ฟ์ผ ํ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์์ ๋ค์ ์ ์์ ๋ฐ์ต๋๋ค. ์๋ LeftBarButton์ด๋ผ๊ณ ๋ถ๋ ์ง๋ง RTL ์ํฉ์์๋ ์ผ์ชฝ์ ์์ง ์์ต๋๋ค...
@stevehurcombe ๊ธฐ์ ์ ํฌ์ ํ์๋ ๊ณ์ ์งํ ์ค์ ๋๋ค. ์ด๊ฒ์ ํ์ ํจ์ฌ ๋ ์์ ํ๊ฒฌ๋์ ์ํด ๋์์ ์คํ๋ ๊ฒ์ ๋๋ค. ๋ถํํ๋ ํ์ค์ ์ด ์ฌ์์ ๋ง์ ๋ถ๋ถ์ด ์ด์ํ ๋ฐฉ์์ผ๋ก ๊ธฐ์ ์ ์ธ ํ์์ ๊ดํ ๊ฒ์ ๋๋ค. Xamarin.Forms๋ 1.0 ๋ฆด๋ฆฌ์ค์ ํจ๊ป ์์ฒญ๋ ์์ API ๋ถ์ฑ๋ฅผ ๋ฐ์์์ผฐ๊ณ ๊ทธ ์ดํ๋ก ๊ณ์ ๊ทธ ๋ถ์ฑ๋ฅผ ์ง๊ณ ์์ต๋๋ค. XF์ ์ด๋ค ๊ฒ๋ค์ ๋จ์ํ API๊ฐ ํํํ๋ ๋ฐฉ์ ๋๋ฌธ์ ์ ๋๋ก ์๋ํ๊ฒ ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๊ฑฐ๋ ์ฌ์ง์ด ์ ๋๋ก ์๋ํ๊ฒ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
ํญ ํ์์ค๊ณผ ํ์ ํ์์ค ๊ฐ์ ๊ธด๋ฐํ ์ํธ ์์ฉ์ด ๊ทธ๋ฌํ ์์ญ ์ค ํ๋์ด๋ฏ๋ก MDP์ ํญ ๋๋ ํญ๋ชฉ ๊ฐ ํ์์ ๊ฒฐํจ์ด ์๋์ง ํ์ธํ๋ ๊ฒ์ ๋ ๋ค๋ฅธ ์์ญ์ ๋๋ค. ๊ฐ ์์๊ฐ ์ฑ์ ์ ธ์ ์ ์ฒด์ ์ผ๋ก ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์์ญ์ด ๋ง์ด ์์ต๋๋ค.
ํด๋ง๊ณผ ๊ด๋ จํ์ฌ ์์ ํ ๋ณ๋์ ํ์ด ์ด ์์ ์ ์ ๋ดํ๊ณ ์์ผ๋ฉฐ ํฐ ๋ฐ์ ์ ์ด๋ฃจ๊ณ ์์ต๋๋ค. ๋ด๋ถ ๋๊ตฌ๋ ์ง๋ 6๊ฐ์ ๋์ ํฌ๊ฒ ๊ฐ์ ๋์์ผ๋ฉฐ ์ฌ๋ฌ๋ถ์ด ๊ทธ๊ฒ์ ์ฌ์ฉํด ๋ณด๊ธฐ๋ฅผ ์ ๋ง๋ก ๊ธฐ๋ํฉ๋๋ค!
@๋งฅ์ผ์ธ
Materialshell ํ์ ์ฒด๊ณ๋ Prism๊ณผ ๋น์ทํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์กด ํ๋ ์์ํฌ์์ ์๋ํฉ๋๊น? (ํ๋ฆฌ์ฆ, FreshMVVM, MVVMCross)
๋๋ ค์ํ์ง ๋ง์ธ์ . ์ปค๋ฎค๋ํฐ๊ฐ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ธฐ ์ ์
@dansiegel
๋ ํ ๋ชจ๋ ๋ํ ์ค์ด๋ผ๋ ์ฌ์ค์ ์๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ๊ฒ๋ง ์๋ฉด ๋ฉ๋๋ค ๐
@jassmith ์ด์ XF์์ ์ผ๋ถ๊ฐ ์คํ ์ค์ด๊ฑฐ๋ ์ํคํ
์ฒ๊ฐ ์ต์์ด ์๋๋ผ๋ ๊ฒ์ด ๋ถ๋ช
ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ผ์ง์๊ฒ ๋ฆฝ์คํฑ์ ๋ฐ๋ฅด๋ ๋์ (์ฌ๊ธฐ์ ๋ฌด๋กํ ๊ฒ์ ์ํ์ง ์์), ์๋ก์ด ํ๋ ์์ํฌ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํ๋ ์์ํฌ๋ฅผ ๋๊ท๋ชจ๋ก ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ด ์ด๋ป์ต๋๊น? ๋งค์ฐ ๋ฌด์ญ๊ฒ ๋ค๋ฆฌ๊ฒ ์ง๋ง ๋๋ค์์ Xamarin Forms ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ์ฑ์ ๋ฆฌํฉํ ๋งํ์ฌ ํจ์ฌ ๋ ์ ์คํ๋๋ ์ฑ์ ๊ฐ๊ฒ ๋์ด ๊ธฐ์ ๊ฒ์
๋๋ค.
"์ฐ๋ฆฌ๋ ์ด๋ฐ ์ข
๋ฅ์ ๋ณ๊ฒฝ์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์" ์ข์ ๋ฆฌํฉํ ๋ง์ผ๋ก PR์ด ๊ฑฐ๋ถ๋๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ๋๊ฐ ๊ทธ ๊ท์น์ ๋ง๋ค์๋์ง ๋ชจ๋ฅด์ง๋ง ๊ทธ๋ ์ฌํธํก์ ํ๊ณ ๊ธด์ฅ์ ํ๊ณ "๊ท์น"์ ์ฌ๊ณ ํด์ผ ํฉ๋๋ค.
๋ฌด์์ด ์ต์ ์
๋๊น? ํ๋ ์์ํฌ๋ฅผ ์ ์งํ ์ ์๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ฅผ ๊ณ์ ์ข์ ์ํค๊ฑฐ๋ ๋ฆฌํฉํ ๋ง ์์
์ ์ํํด์ผ ํ๋ ์ข์ ํ ๊ฐ๋ฐ์๋ฅผ ๊ฐ์ง๋๊น? ๋ด 2์ผํธ๋ง...
@opcodewriter ๋น์ ๊ณผ ๋๋ ๋์ํ์ง๋ง ์ด๊ฒ์ ์ด ์ฌ์์์
ํ์์ ๊ดํ ์๋ก์ด ์๋ฃ๋ฅผ ์ฝ๊ณ ์ ๋ง ๋ง์์ ๋ญ๋๋ค. ํ์ ๋ช ๋ น์ ๋ฐ์ธ๋ฉํ๊ณ URL(์: Prism์ ์ํฅ์ ๋ฐ์ ๊ฒ์ผ๋ก ๊ฐ์ )์ ๋ํ ํ์ ๋ฐฉํฅ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ด๋ฌ๋ํ๊ฒ๋ URI ํ์ ์ฒด๊ณ๋ ์์ ์ ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์๊ณ ํ๋ ์์ํฌ์ ํฉ๋ฆฌ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์๊ธฐ ๋๋ฌธ์ Prism์ ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ค์ ์ ์ฉ์ ๋ฐ์ง ์์ผ๋ ค๋ฉด 100% ๋ฐ์ ์๊ฒฉ์ด ์์ต๋๋ค. :)
์๊ธฐ์ ์ ํํ ์๋ฏธ๋ ์์ง ํ์ ๋์ง ์์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
<Button Command="{segue:Uri}" CommandParameter="app://Foo/Bar/Baz" />
๋๋
<Button Command="{segue:Push}" CommandParameter="{DataTemplate local:MyPage}" />
๋ฐ๋ผ์ ํ์ฅ์ ๊ทธ๋ค์ด ์ทจํ๋ ๋งค๊ฐ๋ณ์์ ๋ํด ๋ ์ ํํ ์ ์์ต๋๋ค. ๋ค์์คํ์ด์ค๋ ์ฃผ๋ก Intellisense๋ก ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์๋๋ก ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
@jassmith ์ด segue ๋ฌผ๊ฑด์ ์ ๋ง ์ข์ํฉ๋๋ค. ํธ์ ๋ชจ๋ฌ์ ์ด๋ป๊ฒ ์ง์ํ ์๊ฐ์ธ์ง ์ฌ์ญค๋ด๋ ๋ ๊น์?
๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ง๊ณ ์์ง๋ ์์ง๋ง ํ๋ฆฌ์ฆ์ฒ๋ผ ๋งํฌ์ ํ์ฅ์ผ๋ก ์ธ์ธ URL ํ์์ ์์ํ ์ ์์ต๋๋ค.
<!-- push -->
<Button Command="{segue:Uri}" CommandParameter="path/to/page" />
<!-- push modal -->
<Button Command="{segue:Uri Modal='true'}" CommandParameter="path/to/page" />
<!-- reset stack -->
<Button Command="{segue:Uri}" CommandParameter="app://root/path/to/page" />
๋จผ์ URI ํ์์ Shell์์๋ง ์๋ํ๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ด์ํ ๊ฒฝ์ฐ ์์ด ์คํ์ ์ผ๊ด๋๊ฒ ์ดํดํ ์ ์๋ ์ ์ผํ ์ฅ์์ด๋ฉฐ ๊ฐ๋ ์ ์ง์ํ๊ธฐ ์ํด ํ์ ์ํธ ์์ฉ์ ์ค๊ณํ ์ ์์ต๋๋ค.
์ง๊ธ์ ์ ์ฒด URI๋ง ์ง์ํฉ๋๋ค. ๋ถ๋ถ์ ์ํฉ์ ๋ง๊ธฐ ๋๋ฌธ์ ๋ค๋ฃจ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค.
ํ์ฌ ์์น๊ฐ app://Shell/Apps/Games/Details ๋ผ๊ณ ๊ฐ์ ํ๋ฉด 3๊ฐ์ง ์๊ฐ
ํนํ ์ด๊ฒ์ ํ์ฌ ShellItem์ Apps ๊ฒฝ๋ก๊ฐ ์๊ณ ํ์ฌ ShellTabItem์ Games ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉฐ ContentPage๊ฐ ๊ฒฝ๋ก ์ธ๋ถ ์ ๋ณด๊ฐ ์๋ ์คํ์ ํธ์๋ Shell์ ์์์ ์๋ฏธํฉ๋๋ค.
<!-- push -->
<Button Command="{segue:Uri}" CommandParameter="app://Shell/Apps/Games/Details/page" />
<!-- push modal -->
<Button Command="{segue:Uri}" CommandParameter="app://page" />
<!-- reset stack -->
<Button Command="{segue:Uri}" CommandParameter="app://Shell/Apps/Games" />
์ uri์์ ์ฒซ ๋ฒ์งธ ์์น๋ ํญ์ ์์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ฌ ํธ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ค์์ ShellTab์ด๊ณ ShellTabItem์ ๋๋ค. ๊ทธ ๋ค์์ ShellTabItem์ ํ์ ์คํ์ ๋ฐ๋ฆ ๋๋ค. ํ์ฌ๋ก์๋ ๊ฐ๋ฅํ ๋ชจ๋ ํ์ด์ง ์ปจํธ๋กค์ URI ํ์์ ๋ฐฑํฌํ ํ ์๊ฐ์ด ์์ต๋๋ค. ์ด๊ฒ์ MasterDetailPage๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ ์ ๋ง ํธ์ด ๋ฉ๋๋ค...
๊ฒฝ๋ก ๋ฑ๋ก ๋ฐ ๊ฒฝ๋ก ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ ํ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ด ํ์ํ์ง ์์ต๋๋ค. ์ฌ์์์ ์ ๊ฑฐํ๊ฒ ์ต๋๋ค.
@jassmith ๋ ์ด ํ์
CanExecute
์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒNavigationParameters
๋ผ๋ ํ์์ ์ธ ๊ฐ๋
์ ๊ฐ์ง๊ณ ์์ด ์ฟผ๋ฆฌ ๋ฌธ์์ด /Navigation/MyPage/MyPageDetails?id=33
ํตํด ๊ธฐ๋ณธ ๊ฐ๋ฟ๋ง ์๋๋ผ ๋ณต์กํ ๊ฐ์ฒด new NavigationParameters {{nameof(MyObject), MyObject}}
๋ ์ ๋ฌํ ์ ์์ต๋๋ค. ๋น์ทํ ๊ฒ์ ์ง์ํ ๊ณํ์ด ์์ต๋๊น?@ChaseFlorell
1) ์ธ๊ทธ์ ํจ๊ป? ํ์ฌ๋ ํ ์ ์์ต๋๋ค. ํ์คํ ๋ ์๊ฐํด๋ด์ผ ํฉ๋๋ค. segue ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง ๊ทธ๊ฒ์... ์ง์ฆ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ฒ๋ฆฌํ ์ ์์ง๋ง ๊ทธ ์์ ์์ ์ ๋ง ๊ฐ์น๊ฐ ์์ต๋๋ค.
2) Segue๋ ํธ์๊ฐ ์๋ฃ๋ ๋๊น์ง ์์ฒด์ ์ผ๋ก ๋นํ์ฑํ๋ฉ๋๋ค. ์ด์ ํ์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง no-op ๋ช ๋ น์ ํ์ฑํํ๋ ค๊ณ ์ถ๊ฐ๋ก ์๋ํฉ๋๋ค.
3) ์ธ๊ทธ์ ํจ๊ป ํธ์/ํ๊ณผ ๊ฐ์ ๊ธฐ์กด ํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์๋์ ์ธ ์กฐ์น์ ๋๋ค.
4) [QueryParameterAttribute]๋ ์ด๋ฏธ ์กด์ฌํ๊ฑฐ๋ ์กด์ฌํ์ง ์์ ์ ์์ต๋๋ค. ํ์ธ๋ ๊ฑฐ๋ถ๋ ํ ์ ์์ต๋๋ค. ;)
๋ณต์กํ ๊ฐ์ฒด ์ง์์ ์ถ๊ฐํ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค. ์์ด๋์ด๋ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๊ฐ์ ๊ฐ์ ธ์ ๋ณต์กํ ๊ฐ์ฒด๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋๋ค.
(P & P์ ๋ค์ CAB-๋ณตํฉ UI ์์ฉ ํ๋ก๊ทธ๋จ ๋ธ๋ก์์) URI ๊ธฐ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ ํ์์ ๊ตฌ์ถ ๊ณผ๊ฑฐ์ ๊ฒฝํ์์, ๋๋ ๊ฐํ๊ฒ ๋น์ ์ด ์ฌ์ฉํ์ง ์๋ ๊ฒ ์ข์ ๊ฒ System.Uri
์ ํ์ ๋์ ๋จ์ง URI์ฒ๋ผ ๋ชจ๋ ๊ฒ์ ๋ณด์ด๊ฒ, ๊ทธ๋ฌ๋ URI ๊ตฌํ ์์ฒด๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. @pprovost ๋ ํ์ ๊ทธ์๊ฒ ๋จ๊ฒจ์ง ๋
ธ๋์ ์์ฒ๋ฅผ ์ฆ์ธํ ์ ์์ต๋๋ค. ์ธํฐ๋ท URI ์ ํ ๋ฐ ์ค๋ฅ(์: ํธ์คํธ ์ด๋ฆ)์ ์ง๋ฉดํ์ ๋ ์๋ง์ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค.
์ด๋ฏธ ํผํด๋ฅผ ์ ์ ๋ถ๋ถ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ค์ ๋ก System.Uri๋ URI ๊ธฐ๋ฐ ํ์ ์ฒด๊ณ๋ฅผ ์ง์ํ ๋ ๊ฐ์ฅ ์ข์ ์ ํ์ ๋๋ค. CAB๋ URI ํ์์ ์ฌ์ฉํ์ง๋ง System.Uri ๊ฐ์ฒด ๋์ ๋ฌธ์์ด์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฌ URI์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค์์ต๋๋ค. ํธ์คํธ ์ด๋ฆ์ ์ ๋ ํ์ํ์ง ์์์ต๋๋ค.
๋น์ ์ด ์๊ตฌํ๋ ๊ฒ์ ์์ธก ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์ง ์๋ ์ด๋ค ๋ฌธ์์ด ๊ตฌ๋ฌธ๋ ํ์ฉํ ์ ์๋ ๋งค์ฐ ๋์จํ ๋ฌธ์์ด ๊ธฐ๋ฐ API์ ๋๋ค. URI/๋ฌธ์์ด ๊ธฐ๋ฐ ํ์ ์ฒด๊ณ๊ฐ ์๋ํ๋ ค๋ฉด ๊ท์น์ด ์์ด์ผ ํฉ๋๋ค.
์์์ URI๋ XF์์๋ ์๋ํ์ง ์์ต๋๋ค. URL์์ ์ ํจํ์ง ์์ง๋ง ํ์ผ ์์คํ ์์ ์ ํจํ ๋ฌธ์ ๋ชฉ๋ก์ ์ ํํ ์์ง ์์ต๋๋ค. ์ด๊ฒ๋ค์ ๋ชจ๋ ๋ฌธ์์ด์ด ์๋ํ๋ ๊ฒฝ์ฐ์ด๋ฉฐ URI๋ ์ด์ค์ผ์ดํํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์๋(๋๋ ์คํจํ๋) ์ด์ ๋ฅผ ํ์ ํ๊ณ "URI ์์ "์ผ๋ก ์ด๋ฆ์ ๋ฐ๊พธ์ง ์์๋ ๋๋ฉฐ ํ์ํ์ง๋ ์์ ๊ฒ์ ๋๋ค.
๋ ์ ํ์ ์ธ(๋๋ ๋ ๋์ ์๋ฏธ๋ก /ํ์ฑ/๊ฒ์ฆ?) ์์ ์ ์ถ์ํ๋ฅผ ๊ตฌ์ฑํ ์ ์์ง๋ง IMHO, System.Uri
๋ ๋ฌด๋ฃ๊ฐ ์๋ ๋ง์ ์ธํฐ๋ท ์ํ๋ฌผ์ ๊ฐ์ ธ์ต๋๋ค. ์ด๊ฒ์ Mono/MonoDevelop์ด ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๊ณ ์ ํ FilePath ๋ฅผ ์์ฑํ ๋ฐฉ์๊ณผ ์ ์ฌํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ด์
๋๋ค.
์ ์ด๋ ๋ชจ๋ URI๋ ์๋์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด ์์ ์ ๋จ์ํํฉ๋๋ค. CAB์์๋ ์คํค๋ง ๋ฐ ํธ์คํธ ์ด๋ฆ ๋ถ๋ถ๊ณผ ํจ๊ป ์ ๋ uri๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
Uri
๋ณด๋ค ResoucePath
์ ๊ฐ์ ๊ฒ์ ํจ์ฌ ์ ํธํฉ๋๋ค. ํ์ง๋ง ์ด ๊ฒ์ ํ๋ฐ๋ถ์๋ ์ด์จ๋ ๊ฑฐ๋๊ฐ ์๋ฃ๋์๋ค๊ณ ํ์ ํฉ๋๋ค.
ํ์ผ ์์คํ ๊ฒฝ๋ก๊ฐ ๋ฌด์๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค...
์์คํ ์ ํผ๋ํ๊ธฐ ์ํด URI๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ฒ ์ต๋๊น? ์คํค๋ง์ ํธ์คํธ ์ด๋ฆ์ ๋ฌด์ํ๊ณ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ์์ํฉ๋๋ค([az]๋ก๋ง ์ ํ๋จ). ์ด๋ค ์ด์ํ ๋ฌธ์๋ฅผ ๋ฃ์ด๋ ์ฐพ์ ์ ์์ผ๋ฉด ๊ทธ๋ฅ ๋ฉ์ถฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ฅํ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ ํจํ C# ์๋ณ์์ฌ์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋จ์ํ ์ผ์นํ์ง ์์ต๋๋ค. ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ฐ์ดํฐ์ ์ด์ค์ผ์ดํ๋ ๋ฐ์ดํฐ๋ ์ด์ค์ผ์ดํ๋์ง ์์ต๋๋ค.
@kzu URI๋ XF์์ ์ ์๋ํ๋ฉฐ ํ์ผ ์์คํ ์คํค๋ง๋ณด๋ค XF์ ๋ ์ ํฉํฉ๋๋ค. ์ค์ ๋ก ์น์ฌ์ดํธ์์ ์ฑ์ ์์ํ ๋ URI๊ฐ ํ์ํฉ๋๋ค. Prism ๊ตฌํ์ ๋ณด๊ณ URI ๊ธฐ๋ฐ ํ์์ด ์ผ๋ง๋ ๊ฐ๋ ฅํ์ง ํ์ธํด์ผ ํฉ๋๋ค. URI ๊ธฐ๋ฐ ํ์ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ์ฌ Prism์ผ๋ก ๊ตฌ์ถ๋ ๋ชจ๋ ์ฑ ์ค์์ ์๋ชป๋ ๋ฌธ์์ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ์ ์ถ๋ ์ ์ด ์์ต๋๋ค. XF ํ๋ซํผ์ URI ๊ธฐ๋ฐ ์คํค๋ง์ ๋ํ ๊ทํ์ ์ฐ๋ ค๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
๋ง๋ ๋ง์ด๋ค. Prism @brianlagunas์ ๋ํ ๋ฐฐ๊ฒฝ ์ ๋ณด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ด์ ์ฌ์์ ์ฃผ์ ๊น๊ฒ ์ฝ๊ณ ์ค์ ๋ก ์ ์ฉํ ํผ๋๋ฐฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ;)
๋งค์ฐ ์ข์ ์ด๋์ ํฐ๋ธ์ด์ง๋ง ๊ณ ๊ฐ์ ์ํด "ํน๋ณํ" ์์ ์ ์ํํ๊ธฐ ์ํด ์ ์ ํ ๊ฐ์ ๋ฐฉ๋ฒ ๋๋ ๊ธฐํ ๋ฐฉ๋ฒ์ ๋ง๋ค์ด ํ์ฅ์ฑ๊ณผ ์ฌ์ฉ์ ์ง์ ์ด ๊ณ ๋ ค๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์๋ฅผ ๋ค์ด ๊ฐ๋ฅํ ๊น์ / ์ด๋ป๊ฒ:
๊ธฐ์ ์ ๋ณด: ์์ด ํ์ด์ง๋ฅผ ์ฌํ์ฉํ์ฌ ํ์ด์ง๋ฅผ ๋ ๋ฒ ํ์ํ๋ฉด ๊ธฐ๋ณธ ์์๊ฐ ๊ทธ ์๋์ ์๋ ๋ค๋ฅธ VM๊ณผ ํจ๊ป ์ฌ์ฌ์ฉ๋ฉ๋๊น?
์๋ ํ์ธ์ @rogihee
๊ตฌํ์ ๋ํ ๊ทํ์ ํผ๋๋ฐฑ์ ํ์ํฉ๋๋ค. ํ์ฅ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค. https://github.com/xamarin/Xamarin.Forms/blob/9558f2837280e02b41848d3a3c3213d49a664751/Xamarin.Forms.Platform.iOS/Renderers/ShellRenderer.cs
Android๋ ํ์ฌ ์ฌ์ ํ ํ๋ฐํ ๊ฐ๋ฐ ์ค์ด์ง๋ง ๋์ผํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
@rogihee ํ์ด์ง ์ฌํ์ฉ์ ๊ฑด์ ํ ๋ฐฉ๋ฒ์ ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ช ์์ ์ผ๋ก ์ตํธ์ธํด์ผ ํ๋ฏ๋ก ํ์ฌ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
์ด "Create*" ์ต์ ์ด ์ข์ ๋ณด์ ๋๋ค. ์ด๊ฒ์ ๋ํ ๋น ๋ฅธ ์งํ์ ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค!
์์๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋๋ ๋ ๋์ Mem/CPU ์ฌ์ฉ๋๋ณด๋ค ์ฑ์ ์๋์ "์ ์ฐํ" ๋๋์ ์ฐ์ ์ํฉ๋๋ค(๋ฌผ๋ก ๊ฒฐ๊ตญ ์ด๋๊ฐ์ ์๊ด ๊ด๊ณ๊ฐ ์์ง๋ง). ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ฌด์๋ณด๋ค iOS / Android๋ฅผ ์ฐ์ ์ํ์ญ์์ค :-).
Shell์ ์ ๋์ฑ์ ๋ํ ์ธ์์ ๋งค์ฐ ์ค์ ์ ๋ก๋๋ค. ์์ง ์ด๋์๋ ์์ง๋ ์์ง๋ง ํจ๊ป ์ค๊ณ ์์ต๋๋ค.
์์ด ์ค๊ณ๋ ๋ถํ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํด ์๋ก ๋ฏธ์น ์ง์ ํ๋ ค๋ ์ด๊ธฐ ์ฌ์ฉ์๋ฅผ ํ๋ณดํด์ผ ํฉ๋๋ค.
@jassmith mig๋ Build์์ 3๋ถ ๋์ ์์ ์ธ๊ธํ์ต๋๋ค.....
๋๋ ๊ทธ์ ์๋น ๊ฐ ์๋๋ค
+1
์ธ๊ณ์ ํ์ฌ ์ํ์ ์ผ์นํ๋๋ก API๋ฅผ ์ ๋ฐ์ดํธํ์ง๋ง ์ฌ์ ํ ์ํ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
์ผ๋ถ ์ ๋ฐ์ดํธ๋ ์ํ์ ์ถ๊ฐํ์ง๋ง ์๊ธฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๋ ๋ค๋ฅธ ์ํ์ ์์ ํ๊ณ ๊ฒฝ๋ก ์ค๋ช ์ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๋ง์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค(๊ฐ๋จํ ๊ฒฝ๋ก๋ฅผ ์ป์์ ๋ฐ๋ผ!)
์ด๋ฐ, ํํฐ์ ๋๋ฌด ๋ฆ๊ฒ ์จ ๊ฒ ๊ฐ์. ํ๋ฅญํ ๊ธ๊ณผ ํ ๋ก . ๋๋ ๊ทธ๊ฒ์ ๋ชจ๋ ํ์ด๋ณด๊ณ (๊ณตํญ์์ ๋ฏธ์ํฉ๋๋ค) ๋ด ์์ ์ ์ ์์ด ์์ต๋๋ค. ๋ค๋ฅธ ๊ณณ์์ ์ธ๊ธํ๋ค๋ฉด ์ฃ์กํฉ๋๋ค.
@jassmith @migueldeicaza ํ์ ๋ชจ์์ ๋์์ ์ถ๊ฐํ์ฌ ListView๊ฐ ์คํฌ๋กค๋ ๋ ์คํฌ๋กค๋๊ณ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์คํฌ๋กค๋ ๋ ํ์๋๋๋ก ๋์์ ์ถ๊ฐํด ์ฃผ ์๊ฒ ์ต๋๊น ? ๊ฑฐ์ ๋ชจ๋ ์ ๋ฌธ ์ฑ์ด ๋ ๋ง์ ๋ถ๋์ฐ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด ์์ ์ ์ํํฉ๋๋ค. ์ด๊ฒ์ ์ํ ์ฅ์น์์ ํนํ ์ ์ฉํฉ๋๋ค.
๋ ๋ค๋ฅธ ํ๋๋ ์ดํดํ๊ธฐ ์ฝ๋๋ก XAML ํ๊ทธ์ ์ด๋ฆ์ ๋ฐ๊พธ์ง ์๋ ์ด์ ์ ๋๋ค. ShellSection ๋์ Tab์ ์ฌ์ฉํ์๊ฒ ์ต๋๊น? ์ด์ ShellX ํ๊ทธ๊ฐ ๋ง์ด ์์ต๋๋ค.
iOS์ ๊ฒฝ์ฐ ํ์ ๋ชจ์์์ ์คํฌ๋กค ๋ชจ๋๋ฅผ ํ์ฑํํ๊ธฐ ์ํด ์ผ๊ณ ๋๋ ์์ฑ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Android์ ๊ฒฝ์ฐ ์ ๋ ์ด์์(CoordinatorLayout, AppBarLayout ๋ฑ)์ ์ฌ์ฉํ๊ธฐ ์์ํด์ผ ํฉ๋๋ค. XF์ Android ๊ตฌํ์ ์ฌ์ ํ โโ๊ธฐ๋ณธ ์ปจํ ์ด๋๋ก RelativeLayout์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด์ ๊ด๋ จํ์ฌ ์๋นํ ๊ตฌ์์ ๋๋ค. ์ด ํน์ ๋ฌธ์ ์ ๋ํ ๊ฐ์ ํฐ์ผ์ด ์ด๋๊ฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Shell์ด โโ๋ค์ํ ์คํฌ๋กค ๋ชจ๋๋ฅผ ์ง์ํ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ํ ํ์ด์ง์ ์ค๋ฅ/๋ค๋ฅธ ์ ํ์ ํ์ ์ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ง์ ๋์์ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Shell์ ์ด ๊ธฐ๋ฅ์ ์ฆ์ ์ง์ํด์ผ ํ๋ฏ๋ก ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์์กดํ๊ฑฐ๋ ๋ณต์กํ UI ๊ณ์ธต์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
@adrianknight89
ListView๊ฐ ์คํฌ๋กค๋ ๋ ์คํฌ๋กค๋๊ณ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์คํฌ๋กค๋ ๋ ํ์๋ ์ ์๋๋ก ํ์ ๋ชจ์์ ๋์์ ์ถ๊ฐํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ฑฐ์ ๋ชจ๋ ์ ๋ฌธ ์ฑ์ด ๋ ๋ง์ ๋ถ๋์ฐ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด ์์ ์ ์ํํฉ๋๋ค. ์ด๊ฒ์ ์ํ ์ฅ์น์์ ํนํ ์ ์ฉํฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ์ ๋ง๋ก ํ ์์๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ๋ ๊ฒ์ ๋๋ค. ๋ถํํ๋ ๋ชจ๋ ํ๋ซํผ์ด ์ด ๊ธฐ๋ฅ์ ์ง์ํ๋ ๊ฒ์ ์๋๋ฏ๋ก ๊ฒฐ๊ตญ ํ๋ซํผ๋ณ ๊ฑฐ๋๊ฐ ๋ ๊ฒ์ ๋๋ค. Android๋ ์ต์ํ ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ฒ์๋ถํฐ ๊ตฌ์ถ๋์์ผ๋ฏ๋ก ์ฌ์ ํ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๊ฐ๋ ์ผญ๋๋ค.
๋ ๋ค๋ฅธ ํ๋๋ ์ดํดํ๊ธฐ ์ฝ๋๋ก XAML ํ๊ทธ์ ์ด๋ฆ์ ๋ฐ๊พธ์ง ์๋ ์ด์ ์ ๋๋ค. ShellSection ๋์ Tab์ ์ฌ์ฉํ์๊ฒ ์ต๋๊น? ์ด์ ShellX ํ๊ทธ๊ฐ ๋ง์ด ์์ต๋๋ค.
์ฌ๊ธฐ ๋ค์ด๋ฐ์ ์ ๋ง ์ด๋ ต์ต๋๋ค. ShellTab์ ์๋จ๊ณผ ํ๋จ์ ๋ํด ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ๋์ ๋ ์ผ๋ฐ์ ์ธ ๊ณ์ธต์ ์ด๋ฆ์ ์ ํํ์ง๋ง ์ด๋ฆ ์ง์ ์ ๋ง์กฑํ์ง ์๋๋ค๋ ์ ์ ์ธ์ ํด์ผ ํฉ๋๋ค. ์ ์์ 100% ํ์ํฉ๋๋ค... ๊ทธ๋ค์ ์ด๋ฆ์ ๋ค์ ๋ฆฌํฉํ ๋งํ๊ธฐ๋ฅผ ์์ ํ ๊ธฐ๋ํ์ง๋ ์์ง๋ง ๋ฌด์์ ํ ์ ์์ต๋๊น...
iOS์ ๊ฒฝ์ฐ ํ์ ๋ชจ์์์ ์คํฌ๋กค ๋ชจ๋๋ฅผ ํ์ฑํํ๊ธฐ ์ํด ์ผ๊ณ ๋๋ ์์ฑ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Android์ ๊ฒฝ์ฐ ์ ๋ ์ด์์(CoordinatorLayout, AppBarLayout ๋ฑ)์ ์ฌ์ฉํ๊ธฐ ์์ํด์ผ ํฉ๋๋ค. XF์ Android ๊ตฌํ์ ์ฌ์ ํ โโ๊ธฐ๋ณธ ์ปจํ ์ด๋๋ก RelativeLayout์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด์ ๊ด๋ จํ์ฌ ์๋นํ ๊ตฌ์์ ๋๋ค. ์ด ํน์ ๋ฌธ์ ์ ๋ํ ๊ฐ์ ํฐ์ผ์ด ์ด๋๊ฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Shell์ด โโ๋ค์ํ ์คํฌ๋กค ๋ชจ๋๋ฅผ ์ง์ํ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
Shell์ CoordinatorLayout + AppBarLayout์ ์ฌ์ฉํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋ถ๊ฐ ์คํฌ๋กค ์ง์์ "๋นํ์ฑํ"ํ์ง๋ง ์๋ํฉ๋๋ค. iOS ์คํฌ๋กค ์คํ๋ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค. ๋ถํํ๋ UWP์ NavigationView๋ ์ด ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค.
๋ํ ํ์ด์ง์ ์ค๋ฅ/๋ค๋ฅธ ์ ํ์ ํ์ ์ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ง์ ๋์์ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Shell์ ์ด ๊ธฐ๋ฅ์ ์ฆ์ ์ง์ํด์ผ ํ๋ฏ๋ก ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์์กดํ๊ฑฐ๋ ๋ณต์กํ UI ๊ณ์ธต์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
์, ์๊ฐ ํ์ํฉ๋๋ค :)
@jassmith
James Montemagno์ ์ฐ๊ฒฐ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ฐ๊ฒฐ ์ํ์ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ๊ณ ์์ต๋๋ค. ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์ธํฐ๋ท์ด ๋ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋ ๋๊น์ง ์ฌ๋ผ์ด๋/ํ์ด๋ ์์ ๋ฐ ์ ์ง ์ํ๋ก ์ ์ง๋๋ ์๋ฆผ์ ํ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Instagram์์ ์ด ์๋ฆผ์ ํ์ ๋ชจ์ ๋ฐ๋ก ์๋์ ์์ต๋๋ค. Tumblr์์ ํ๋จ ํ์ ๋ชจ์ ๋ฐ๋ก ์์ ์์ต๋๋ค. YouTube์์๋ ์ด์ํ๊ฒ๋ ํ๋จ ํ์ ๋ชจ์ ์๋์ ์์ต๋๋ค. ์๋ง๋ ์ด์ ๊ฐ์ ๊ฒ์ด Shell์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๊น?
๋ด๊ฐ ์๋ ํ ์ ์๋ ํ์ ์ปจํธ๋กค์ ๊ฐ๋ณ๊ฒ ๋ซ์ ์ ์์ง๋ง ๊ธฐ์กด ์ฐฝ์ ์ค๋ฒ๋ ์ดํ๋ ๊ฒ์ ๋๋ค. ๋ฐฉ๊ธ ์ธ๊ธํ ์๋ฆผ๊ณผ ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ์ ํ์ ์๋ฆผ์ ๋ถ๋ชจ ์ฐฝ์ ์ค๋ฒ๋ ์ดํ ํ์๊ฐ ์์ผ๋ฏ๋ก(์ฆ, ๋ถ๋ชจ ์๊ฐ์ ํธ๋ฆฌ๋ ์ฌ์ ํ ์ ์ค์ฒ์ ๋ฐ์ํจ) Popup์ด ์ ํฉํ์ง ํ์คํ์ง ์์ต๋๋ค.
Shell์ ์ด View(Notification[View]๋ผ๊ณ ํจ)๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ฐฐ์น ๋ฐ ์ง์ /์ข ๋ฃ ์ ๋๋ฉ์ด์ ๋์์ ์ ์ํ๋ ์์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ณธ์ง์ ์ผ๋ก Shell, INavigation ๋๋ ๋ค๋ฅธ ๊ฒ์ ๋ด์ฅ๋ ํฌ๋ก์ค ํ๋ซํผ ํ ์คํธ/์ค๋ต๋ฐ ๊ตฌํ์ ๋๋ค. ์ด๊ฒ์ ํ๋ซํผ๋ณ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ด๋๋ก ๊ฐ์๋์ง ์์ง๋ง ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํฉ๋๋ค.
1.0์์ ๋์จ ๊ตฌ์ ์ํคํ ์ฒ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์์ ์ฑ, ์ ์ฐ์ฑ ๋ฑ์ ๋๋ฌ์ผ ๋ ผ์๊ณผ ๊ด๋ จํ์ฌ ๋๋ ๊ทธ๊ฒ๋ค์ ๋ฌ์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ ๋ ListView2๋ฅผ ๋งค์ฐ ์ ํธํฉ๋๋ค.
@jassmith
๋ํ, ๋๋ ํ์ด ๋๋ฌด ์์์ง๋ ๊ฒ์ ๋ํด ๊ฐ์ ์ฐ๋ ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฌ์ค ์์ ์ ์ด๋ฐ ์๊ธฐ๋ฅผ ํ ์ ์ด ์์ด์. ํ์ด ์์ผ๋ก ๋ ํฌ๊ฒ ์ฑ์ฅํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๐ @davidortinau @migueldeicaza
@jassmith ์ ๋ App ํด๋์ค์ฉ ๋ ๋๋ฌ๊ฐ ์๋ค๋ฉด ํ์ฌ ํ์ฌ ํด์ปค๊ฐ ๋ฌ์ฑํด์ผ ํ๋ ๋ง์ ์ผ์ ํ ์ ์๋ค๊ณ ๋ฏฟ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, RgPopups ํ๋ฌ๊ทธ์ธ์ ์ฑ์ ๊ธฐ๋ณธ ๋ณด๊ธฐ๋ฅผ ์ก๊ณ ๋ ๋๋ง๋ ๋ณด๊ธฐ๋ฅผ ์ฑ์ ์ฃผ์ ํ์ฌ ์ ์ฒด ํ๋ฉด ํ์ ๋ชจ์์ ์ ๊ณตํฉ๋๋ค. ์ด๊ฒ์ ํ์ฌ "์์ํ" Xamarin Forms๋ก ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฑ์ ๋ ๋๋ฌ๊ฐ ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์ค์ค๋ก ํ ์ ์์ต๋๋ค.
์ ๋ ์ด๋ฌํ ์ข ๋ฅ์ ์๋ฆผ์ Shell์ ์ถ๊ฐํ๋ ๋ฐ ์ฐฌ์ฑํฉ๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ํ๋ ์์น์ ์์๋ก ํ์ด์ง๋ฅผ ๋ฃ์ ์ ์๋๋ก ๋ง๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น? ์ด๊ฒ์ ๋์์ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ํ๋ฉด์ ํ์ํ๊ณ ๋ถํ ๋ณด๊ธฐ(๋ง์คํฐ ์ธ๋ถ ์ ๋ณด ํ์ด์ง)๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํ์ง ์์ผ๋ ค๋ ํ๋ธ๋ฆฟ/๋ฐ์คํฌํฑ/๋ ธํธ๋ถ(๋ํ ํ๋ฉด ์ฅ์น)์์ ํนํ ์ค์ํฉ๋๋ค. ์: Google ์ง๋๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝํ ์ธ ๊ฐ ์ง๋ ์์ ์ด๋ป๊ฒ "๋ ๋ค๋๋์ง" ํ์ธํ์ญ์์ค(๋ถํ ๋ณด๊ธฐ ์์). ํญ์ด๋ ๋ถ๋ ์์ญ ๋ด ํ์๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ํ์ด์ง๊ฐ ์๋ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๊ทน๋๋ก ์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์ Xamarin Forms๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ข ๋ฅ์ ์์ ์ ์ฆ์ ์ํํ ์ ์์ต๋๋ค(ํ์ด์ง๋ฅผ ์ค์ฒฉํ ์ ์์ ๋ด๋ถ ๋ณด๊ธฐ). ์ฐ๋ฆฌ๋ ์ค์ ๋ก NavigationPage์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ณด๊ธฐ์ธ ์์ฒด ์ฌ์ฉ์ ์ ์ ๋ณด๊ธฐ๋ฅผ ๊ฐ๋ฐํ์ฌ ์ด๋ฌํ ์ข ๋ฅ์ ๋ ์ด์์์ ์ํํ ์ ์์์ง๋ง ๋ง์ ์์ /์ด๋ ค์ด ์์ ์ด์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ํ๋ ๊ณณ์ ์ฝํ ์ธ (ํ์ด์ง ํฌํจ)๋ฅผ ๋ฃ์ ์ ์์ด์ผ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ํ๋ ์์น์ ์์๋ก ํ์ด์ง๋ฅผ ๋ฃ์ ์ ์๋๋ก ๋ง๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น?
@jsiemens ๋ ์ด ๋ณด๊ธฐ๊ฐ ์ ํ์์๋ ์ ๋๋ก ๋ณด์ด์ง ์์ง๋ง ๋ฐ์คํฌํฑ ๋ฐ ํ๋ธ๋ฆฟ์์๋ ๋ฉ์ง๊ฒ
@dansiegel ์ ์ด๋ ๊ฐ์ธ์ ์ผ๋ก VSM ๋๋ ์ด์ ๋๋ฑํ ๊ฒ์ ์ฌ์ฉํ์ฌ ํน์ ๋ทฐํฌํธ ์๊ณ๊ฐ(ํ์ฌ GMaps๊ฐ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด) ์๋์์ ์คํฌ๋กค ๋ณด๊ธฐ๋ฅผ ์ด๋ํ๊ณ ์์ถํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ์ ๋ฐ ์ํ ๊ด๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ถ๊ธํ ๊ฒ์ ๋๋ค.
ํ์: ์ฌ์ฉ์ ์ฌ์ ์ ๊ด์ ์์ ์์ํ ๋ค์ ์ฌ์ฉ์๊ฐ ์ด๋ป๊ฒ ์๋ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋์ง ์ดํด๋ณธ๋ค๋ฉด ๊ทน๋ณตํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋๋ผ๊ณ ํ์ ํฉ๋๋ค. ํ์์ ์ ํ์ ์ ์ฒด ํ๋ฉด ํน์ฑ๊ณผ ์๋ฅผ ๋ค์ด ๋ ํฐ ํ๋ฉด์ ์์ ๋ณด๊ธฐ์ ์๋ตํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์๋ ํ๋ธ๋ฆฟ๊ณผ ๋ ์์ ๋ณด๊ธฐ๋ฅผ ๋จ์ผ ํ์ ์ด์ ํ๋ก '๋ณผ' ๊ฒ์ ๋๋ค. ์์ ํ๋ฉด์๋ ๋ ๊ฐ์ ์ด์ ํ๊ฐ ์์ ์ ์์ต๋๋ค. ํ์์ ์ด๋ป๊ฒ๋ ๋ฐ์ํด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์๋ก์ ์ฐ๋ฆฌ๋ ์ํฉ์ ๋ง๋ ๊ฒ์ด๋ฏ๋ก ๋ฐ์ํ๋ ํน์ฑ์ ํ์คํ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ๋ ์์ํฌ์ ์์กดํ ์ ์์ง๋ง ํ๋ ์์ํฌ๋ ๊ทธ๊ฒ์ ์ง์ํด์ผ ํฉ๋๋ค.
@jsiemens @dansiegel ํ์ฌ ์ด๊ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ControlTemplate
์
๋๋ค. ๋ด "ํ์ด์ง" ์ ํ ์ฝํ
์ธ ๋ฅผ ContentView
๋ก ๋ง๋ค๊ณ ํ๋ซํผ์ ์ ํฉํ ContentPage
( NavigationPage
๋ด๋ถ)์ ํธ์คํ
ํฉ๋๋ค. ControlTemplates
๋ฅผ ์ฌ์ฉํ๋ฉด ControlTemplate
์ ๋ฐ์ธ๋ฉ ๊ฐ๋ฅํ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ผ๊ฑฐ๋ ๋๋ ์ฌ๋ฌ ๋ฐ์ธ๋ฉ๋ ContentViews
(์ผ๋ฐ์ ์ผ๋ก Grid
์ ์ค๋ฒ๋ ์ดํ ์ ์์)๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ControlTemplate
์์ฒด( DynamicResource
๋ฅผ ์ฌ์ฉํ ์๋ ์์). ์ต์ข
๊ฒฐ๊ณผ๋ ๋ชจ๋ ์ฝํ
์ธ ๊ฐ ํ์ด์ง์ ์์ง๋ง ๋ชจ๋ ์ฝํ
์ธ ๊ฐ ํญ์ ํ์๋๋ ๊ฒ์ ์๋ ์น ์ฌ์ดํธ์ CSS ํจ๋๊ณผ ์ฝ๊ฐ ์ ์ฌํ๊ฒ ์๋ํฉ๋๋ค. ControlTemplate
๋ ์ด๊ฒ์ ๋ํด ๋ง๋ฒ๊ณผ๋ ๊ฐ์ผ๋ฉฐ ๋๋ ๊ทธ๋ค์ ๊ธฐ๋ฅ์ด Shell์์ ๋ณด์กด๋๊ธฐ๋ฅผ ์ํฉ๋๋ค.
@dansiegel ๋๋ ๋จ์ํ ์ฑ์ด ํ๋ธ๋ฆฟ/๋ ธํธ๋ถ/๋ฐ์คํฌํฑ์์ ์คํ๋๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์ ๋ก๋ํ๋๋ก ์ฝ๋ฉํ ๊ฒ์ ๋๋ค.
@jsiemens ๊ด์ฐฎ์ต๋๋ค. ์ ์๊ฒฌ์ ๊ทํ์ ์์ด๋์ด๋ฅผ ๋์ฑ ๊ตฌ์ฒดํํ๊ธฐ ์ํด ์ถ๊ฐ ๋ํ์ ๋นํ์ ์ฌ๊ณ ๋ฅผ ์ด์งํ๊ธฐ ์ํ
@dansiegel ์, ๊ทธ๊ฒ์ด ๋ด๊ฐ
์ด ์ฌ์์ ๋ํ ์ฃผ์ ๊ฐ ์๋๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ณต์กํ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ(์: @MelbourneDeveloper ์ ์ธ ๋ฒ์งธ ์ฐ์ ์์ - ์ ์ฐ์ฑ)์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ธ๊ธํ์ต๋๋ค. ์ด๊ฒ์ ํ์คํ ๊ฐ์ฅ ์ค์ํ ๋ ์ด์์์ ๋๋ค. ์ ์ ์ ํ์ ์ํ ๋ง์์ ๋๋ค(ํ์ ํ์ด์ง ๋ฐ ํญ๊ณผ ๊ฐ์ 'ํ์ด์ง ์ ์ฉ' ์ฝํ ์ธ ๋ฅผ ํฌํจํ ์ ์๋ ์ฝํ ์ธ ํจ๋์ ์ง๋ ์๋จ์ ๋์ธ ์ ์๊ธฐ๋ฅผ ์ํ๋ ๋งคํ ์ฑ์ ๊ตฌ์ถ ์ค์ ๋๋ค).
์์ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ด ์ด๋ป๊ฒ ํด๊ฒฐ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ ๋ํ ๋์ ์ด๊ธฐ ๋ฐ์์ ๋ด๊ฐ ์ด๋ฏธ ํ ์ ์๋ ์ผ์ ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Xamarin Forms ํ์ ๋ด๊ฐ ์ด๋ฏธ ํ ์ ์์๋ ์ผ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ณ์ ๊ตฌ์ถํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์: CSS, Visual State Manager, ์ด์ Drawing ๋ฐ Shell ์ฌ์). ๊ทธ๋์ ๊ทธ๊ฒ์ ๋์๊ฒ ๋ง์ ๊ฐ์น๋ฅผ ๊ฐ์ ธ๋ค์ฃผ์ง ์์ต๋๋ค. ์ฐจ๋ผ๋ฆฌ ๋ด๊ฐ ์ด์ ์ ํ ์ ์์๋ ์ผ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์ถ์ต๋๋ค(์ฌ์ฉ์ ์ ์ ์ปจํธ๋กค ๋ฐ/๋๋ ๋ ๋๋ฌ ์ธ๋ถ์์). ์ ธ์ด ๊ตฌ๋ฌธ์ด ๋ ์ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ต์ด๋ผ๋ฉด ์ ๋ ๋ชจ๋ ์ฐฌ์ฑํ์ง๋ง ๊ถ๊ทน์ ์ผ๋ก ์ค์ ๋ก ๊ฐ์น๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ํ์ฌ ํ์ด์ง/๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ๋ณด๋ค ๋ ๊ฐ๋ ฅํ๊ณ ํํ๋ ฅ์ด ๋ฐ์ด๋๊ธธ ๋ฐ๋๋๋ค.
๋ค์ดํฐ๋ธ ์์ ฏ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ด์์ ๋ด์ ๋ชจ๋ ํ์ ๋ณด๊ธฐ๋ฅผ ๋ ๋๋งํ ์ ์๋ ๊ฒฝ์ฐ xamarin ๋ณด๊ธฐ๋ณ๋ก ๋ค์ดํฐ๋ธ ๋ณด๊ธฐ ์์ฑ์ ๋ถ๋ฆฌํ ์ ์์ต๋๊น? ์ผ์ข ์ ์๋ ํ์ด๋ธ๋ฆฌ๋ ํ๋ฌํฐ/์๋ง๋ฆฐ ์ ๊ทผ ๋ฐฉ์์ผ๋ก XF ๋ทฐ ๊ทธ๋ฃน์ด ๋จ์ผ ํ๋ฉด์ผ๋ก ๋ ๋๋ง๋๊ณ ํ๋์ ๊ธฐ๋ณธ ๋ทฐ๋ก ๋ธ๋ฆฌํธ๋ฉ๋๋ค. Android ๋ณด๊ธฐ ์์ฑ/๋ ์ด์์ C# -> Java interop ๋น์ฉ์ ํผํ๋ ๊ฒ์ด ์ ์ฉํ ๊ฒ์ ๋๋ค.
์งํ์ค!!
@jassmith ์ ธ ์ข ๋ฃ ํ, ํจ๊ป ์ถ์ฒจํ๋์?
์์ macos์ wpf๋ฅผ ์ง์ํฉ๋๊น?
@juepiezhongren ์ด๊ธฐ ๋์์ iOS ๋ฐ Android์ ๋๋ค. ๊ทธ ํ์ ๋ค๋ฅธ ํ๋ซํผ์ด ์ฐ์ ์ ์ฉ๋ฉ๋๋ค.
๋๋ฉด์ ํ์ฌ ๊ฐ๋ฐ๋์ง ์์ต๋๋ค. ํ์ฌ ์ฌ์์์๋ Shell์์ ์ ํจํฉ๋๋ค. ์ค๋๋ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Xamarin.Forms ๋ด์์ SkiaSharp ๋ฐ Skia ๊ธฐ๋ฐ ์ปจํธ๋กค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ๋ฃ ๋ฐ ๊ธฐํ ๋์์ธ ์คํ์ผ์ ๋ํ ์ผ๊ด๋ ๋์์ธ์ ์ง์ํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ธฐ๋ณธ ์ ๋ต์ ์ฐ๊ตฌํ๊ณ ์์ต๋๋ค.
@davidortinau ์์ด RTL์ ๋ ์ ์ง์ํ๋๋ก ํฉ๋๊น?
์ด๋ค ๋ฉด์์ ๋ ๋์๊ฐ์? ํ์ฌ RTL ์ง์์์ ๋์น๊ณ ์๋ ๊ฒ์ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ณณ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์์งํ ๋งํ๋ฉด ํ๋์ XF ๊ฐ๋ฐ์ ํ์ง ์์์ง๋ง ๋๋ถ๋ถ์ ์ ํ ์ฌํญ์ ์๋ ค์ ธ ์์ต๋๋ค. #1222 ๋ฐ #2448์ ์ดํด๋ณด์ธ์.
์์ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ ํ ์ฌํญ์ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ธฐํ ํ๋ซํผ๋ณ ์ ํ ์ฌํญ
Xamarin.Forms์ ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค. ์ ์ด์ ์ด๋ ๊ฒ ์ง์ด์ก์ด์ผ ํ๋ค.
๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ์ง ์๊ณ xf๋ ์ฌ์ ํ ๋ง์ด ๋ถ์กฑํฉ๋๋ค.
@juepiezhongren
๊ทธ๋ฅ Skiasharp๋ฅผ ์ฌ์ฉ
@mackayn ๋ง์ด ์ฌ์ฉํ์ต๋๋ค
https://github.com/xamarin/Xamarin.Forms/issues/1789
๋ณดํธ์ ์ธ ์ธ๋ชจ๋ ํ์์
๋๋ค
Adam์ ํ์ฉ ๋ฐ์์ต๋๋ค. xamarin์ด ์๋ ํจ์ฌ ๋ ๋์ ํํ์ ์ป์ ์ ์์๋ xf์๊ฒ๋ ์ ๋ง ์ฌํ ์ ํธ์ ๋๋ค.
xamarin.native๋ ๋ค์ดํฐ๋ธ ๋๋ ํ๋ฌํฐ ๋ฐ์์ ๊ด๊ณ์์ด ๋ค๋ฅธ ํ๋ซํผ ๊ฐ ์๋ฃจ์ ๋ณด๋ค xf์ ๋ํด ํจ์ฌ ๋ ๊ฒฌ๊ณ ํฉ๋๋ค. dotnet ์ ํธ๊ฐ๋ก์ xf์ ํ์ฌ ์ํฉ์ ํญ์ ์ฝ๊ฐ ์ค๋ง์ค๋ฝ์ต๋๋ค.
@juepiezhongren
์ด ๋ ผ์๋ ๋ฌด์๋ฏธํฉ๋๋ค. Flutter๋ฅผ ์ฌ์ฉํ๋ ๊ทํ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ๋ชปํ๋ฉด ์ฌ๋ฌ ํ๋ซํผ(Flutter๊ฐ ์๋ iOS ๋ฐ Android๋ง ํด๋น)์ ๊ฑธ์ณ ์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ ์ผ๊ด๋ ๋ชจ์๊ณผ ๋๋์ ๋ ๋ฌ์ฑ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
๋จ์ํ ์์ ๋ถํ, ๊ทธ๋ฅ ๋๋ฌด. ์ฌ์ ํ ๋ง์ธ!
๋๋ Skia๊ฐ Telerik์ด ํ ๊ฒ์ฒ๋ผ Forms API์ ํจ์ฌ ๋ ๋ง์ด ๊ตฌ์์ง๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ๋์ํฉ๋๋ค.
๊ทธ๋๋ Shell & CollectionView์ ๋ ธ๋ ฅ์ ํฌ์ํ๊ณ ์์ด ๊ธฐ์ฉ๋๋ค.
์๋ ํ์ธ์, ๋ชจ๋๋ค ๋งํด์ฃผ์ธ์. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ธ์ด์ ๋ํด ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ ์ด์์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์๋ ํ์ธ์,
์์ด๋์ด๊ฐ ๋ง์์ ๋ค์ง๋ง ๋ช ๊ฐ์ง ์์ ์ ๋ณด๊ฐ ์์ต๋๋ค.
์ ๊ฐ ์ข ๋ฆ์์ง๋ง ๋ค์ด๋ฐ์ด ์ข ํท๊ฐ๋ฆฌ๋ ๊ฒ ๊ฐ์์.
ํญ๋ชฉ, ์น์
๋ฐ ์ฝํ
์ธ ๋ ๋ชจ๋ ์ค์ ๋ก ์ผ๋ฐ์ ์ธ ์ด๋ฆ์
๋๋ค. ๊ทธ๊ฒ๋ค์ด ์ด๋ค ๊ด๊ณ์ ์๋์ง ๋น์ฅ์ ๋ถ๋ช
ํ์ง ์์ต๋๋ค. ์ฝํ
์ธ => ์น์
=> ํญ๋ชฉ ๋๋ ์น์
=> ์ฝํ
์ธ => ํญ๋ชฉ ๋๋ ํญ๋ชฉ => ์น์
=> ์ฝํ
์ธ ์
๋๊น?
๋ฐ๋ผ์ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์ด๋ฆ์ ์ฐพ์ ๋ค๋ฅธ "์ฌ๋ฌผ"์ด ๋ฌด์์ธ์ง ์ข ๋ ์ง์ ํ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋๋ฅผ ๋ค์ ์ ๋ ฅ์ผ๋ก ์ด๋๋๋ค. ๋ชจ๋ ๋ด๋ถ ํญ๋ชฉ์ ๋ํ ์ปจํ ์ด๋๋ก Shell์ด โโ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ด๋ถ์ "ShellItem" ๋์ "Item"๊ณผ ๊ฐ์ ์ง์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ "๊ฒ๋ค" Shelltem, ShellSection ๋ฑ์ ํธ์ถํ๋ ๊ฒ์ด ์ฝ๊ฐ ๋ถํ์ํ์ง๋ง ๊ด์ฐฎ์ต๋๋ค. ๋ ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์์ผ
2018๋ ์๋ ์ถ์๋๋์?
์ง๊ธ ์ฌ์ฉํ ์ ์๋ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฆด๋ฆฌ์ค๊ฐ ์์ต๋๋ค! ๋ช ๊ฐ์ง ํ๋ฅญํ ์ํ์ ๋ณด๋ ค๋ฉด https://blog.xamarin.com/connect-2018-xamarin-announcements/ ๋ฅผ ์ดํด๋ณด์ญ์์ค.
Android 9๊ฐ ์ ๋ง๋ก ํ์ํ๊ฐ์? ์กฐ๊ธ์ ํ๊ณ๊ฐ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ชจ๋ ๊ฒ์ด ๊ฝค ์ข๊ฒ ๋ค๋ฆฌ์ง๋ง ์์ ํ UI ์ํธ ์์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
์๋ํ ๋ ์๊ฒ ๋ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ด๊ธฐ ๊ด์ฌ์ฌ๋ ๋น์ฆ๋์ค ๋ก์ง ๋๋ ์ฝ๋(์: Bluetooth ์ฐ๊ฒฐ ์ฅ์น์์ ์์ ๋ ๋ฉ์์ง)์์ ํ์ด์ง ๋ณ๊ฒฝ์ ํธ๋ฆฌ๊ฑฐํ๋ฉด์ ์ ์ ํ ๋ถ๋ฆฌ๋ฅผ ์ ์งํ๋ฉด์ ํ์์ ๊ตฌ๋ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
@hassanrahimi
์๋ ํ์ธ์, ๋ชจ๋๋ค ๋งํด์ฃผ์ธ์. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ธ์ด์ ๋ํด ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ ์ด์์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
RTL์ด ์ง์๋๋ ๋์ ํ๋ผ์ด์์ ๋ฉ๋ด๋ ์ฌ์ ํ ์ผ์ชฝ์ ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ ํ์ฌ ์ ํ ์ฌํญ์ ๋๋ค.
ํ๋จ ํญ๋ฐ UI๋ฅผ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๊น?
์ ๋ด๋ถ๋ฅผ ํ์ํ ๋ ๋ค์ ๋ก๋๋์ง ์๋ ์ปจํธ๋กค์ ์์ ์ถ๊ฐํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด FAB..
@stfnilsson ํ๋จ
MaterialShell์ ๋ํด FAB์ ๊ฐ์ด ์ค๋ช ํ ๋ ๊ธ๋ก๋ฒ ์ปจํธ๋กค์ ์ถ๊ฐํ ๊ณํ์ ๋๋ค. FAB ์ธ์ ์ด๋ก๋ถํฐ ์ด์ ์ ์ป์ ์ ์๋ ์ถ๊ฐ ์๋๋ฆฌ์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น?
์ฒซ์งธ: ์ด์ ์ ๋ด ์์ ์ ์์ ์ฌ์ฉํ ์ ์ด ์์ต๋๋ค. ์ด์ ๋ด ์์ ๊ทํ์ ์๋ก ์ฝ๊ฒ ๊ต์ฒดํ ์ ์์ผ๋ฉฐ ํจ์ฌ ๋ ์ข์ต๋๋ค. ๋ ์ ๋ง ์ข์.
์๋ง๋ ์๊ณผ ๊ด๋ จ์ด์๋ ์ฌ์ฉ์ ์ ์ ๋ฐฉ๋ฒ์ด์ง๋ง ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ๋ก 1:
๋งค์ฐ ๋ง์ถคํ ๋ฉ๋ด๊ฐ ์๋ ์ฑ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์ฑ์ ๊ฐ ๋ชจ์๋ฆฌ์ ํ๋์ ๋ฉ๋ด ๋ฒํผ์ด ์์ต๋๋ค. ๋ฒํผ์ ์ด๋ป๊ฒ ์ถ๊ฐํ์ฌ ์
ธ์ ์ผ๋ถ๊ฐ ๋๋๋ก ํฉ๋๊น(์: ์ค๋ฒ๋ ์ด ๋๋ ๋น๋ณด๋). ํ์ํ ๋๋ง๋ค ๋ค์ ๋ ๋๋ง๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค.
์ฌ๋ก 2:
์์ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ํ๋จ ํญ๋ฐ๋ฅผ ์ฌ์ฉ์ ์ ์ํ์ฌ ๊ฐ์ด๋ฐ ๋ฒํผ์ด ๋ ๋๊ฒ(๊ฐ์ด๋ฐ ์ ๊ธฐ ๋ฒํผ์ด๋ผ๊ณ ํจ) ํ์๋๋๋ก ํ๊ณ ์ถ์ต๋๋ค. ๋ ๋๋ฌ๋ฅผ ์ฌ์ฉํ๊ณ ํ๋จ ํ์ ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉ์ ์ง์ ํด์ผ ํฉ๋๊น?
์ด์ ๊ฐ์ ํน๋ณํ ๊ฒฝ์ฐ์ ์์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํ์ญ๋๊น?
๋ฌผ๋ก ๊ฐ ํ๋ซํผ์์ ํ๋ ๊ฒ๋ ๊ณ ๋ คํ์ง๋ง ๋ฉ๋ด๋ ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํ๊ฒ ๋ณด์ฌ์ผ ํ๋ฏ๋ก ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค..
์ฌ๊ธฐ ๋ด ํผ๋๋ฐฑ์ด ์์ต๋๋ค. ์ด ํ
์คํธ๋ฅผ ์ํํฉ๋๋ค( Xamarin.Forms 4.0.0.8055-pre1
).
<Shell.FlyoutHeader>
<local:FlyoutHeader />
</Shell.FlyoutHeader>
<ShellItem Title="Home" Icon="home.png">
<ShellSection>
<ShellContent>
<local:MainPage />
</ShellContent>
</ShellSection>
</ShellItem>
<ShellItem Title="Notifications" Icon="notification.png">
<ShellSection>
<ShellContent Title="Recent">
<local:NotificationPage />
</ShellContent>
</ShellSection>
</ShellItem>
<ShellItem Title="Test" Icon="icon.png">
<ShellSection Title="Home" Icon="home.png">
<ShellContent>
<local:MainPage />
</ShellContent>
</ShellSection>
<ShellSection Title="Notifications" Icon="notification.png">
<ShellContent Title="Recent">
<local:NotificationPage />
</ShellContent>
<ShellContent Title="Settings">
<local:SettingsPage />
</ShellContent>
</ShellSection>
</ShellItem>
ํ๋ฒ๊ฑฐ ๋ฉ๋ด๋ฅผ ํญํ๋ฉด ๋ชจ๋ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ Test
๋ฉ๋ด๋ก ์ด๋ํ์ฌ Home
๋ฐ Notifications
๋ฅผ ์๋ค๋ก ๋๋ฅด๊ณ Recent
๋๋ Settings
์ค์์ ์ ํํ๋ฉด ํ์ด์ง๊ฐ ๊ฐ๊ฐ ์ด๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ฒ๊ฑฐ ๋ฉ๋ด๋ฅผ ๋ค์ ํญํ๋ฉด ์ฑ์ด ๋ค์ด๋ฉ๋๋ค.
GroupHeaderTemplate ์ ์ฌ์ฉํ์ฌ ShellItem์ ์๋ ShellContent ๊ทธ๋ฃน์ ์ ๋ชฉ์ ํ์ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๋ง์ ์ฌ์ฉ์์๊ฒ Xamarin Forms๋ ํ์ฌ ํฌ๊ธฐ์ ๋ณต์ก์ฑ์ผ๋ก ์ ์ง ๊ด๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์๋ก์ด ๊ฒ์ ๋ณต์ก์ฑ์ ๋๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ค์ฌ์ผ ํฉ๋๋ค.
@jassmith ์๋๋ ์์ด ์๋ ๊ฒ์ด ๋ ๋์ ์
Shell์ด โโ์๋ฃ๋๋ฉด ํฅํ ๊ฐ๊ฐ์๊ฐ๋ ์ ์๋ ์ฌํญ์ ๋ฌด์์ด๋ฉฐ ์๋ฃ๋๋ฉด Xamarin Forms์ ์ ์ฒด ๋ณต์ก์ฑ์ด ๊ฐ์ํฉ๋๊น? ContentPage๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ํ์ด์ง๋ ๊ฐ๊ฐ์๊ฐ๋ฉ๋๊น?
์ ๋ต์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ต๋ํ ๋ง์ ๊ฒ์ ์ป๋ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. Core Repo์ ์์ ์ฑ๊ณผ ์ ์ง๊ด๋ฆฌ๊ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
๋ํ Shell์ด โโShellPage๋ผ๊ณ ๋ถ๋ฆฌ์ง ์๋ ์ด์ ๊ฐ ์๋ค๋ฉด? ๋ค๋ฅธ Page ํด๋์ค์๋ "Page"๋ก ๋๋๋ ์ด๋ฆ์ด ์์ต๋๋ค.
Shell์ ๋ํ ํ์ฌ ๊ด๊ณ ( https://blog.xamarin.com/xamarin-forms-4-0-preview/ )๋ ์ ๋งํ์ง ์์ต๋๋ค.
- ๋์ ์์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ฅผ ํํํ๋ ๋จ์ํ๋ ๋ฐฉ๋ฒ
์ด๊ฒ์ Xamarin์ ์ค์ ๋ชฉ์ ์ด์์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์๋ Xamarin์ด ํ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๋ ์ด์์์ ๊ดํ ๊ฒ์ด์ด์ผ ํฉ๋๋ค.
- ํ๊ฒ ๋ชจ๋ฐ์ผ ํ๋ซํผ์ ์ ํฉํ ๊ณตํต UI ํ์ ํจํด์ ๊ณ์ธต
Xamarin.Forms๊ฐ ๋ฐ์คํฌํฑ๋ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ "๋ชจ๋ฐ์ผ"์ด ์๋ชป ์ธ์๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
- ๊ฐ๋ ฅํ ํ์ ์๋น์ค
Xamarin.Forms์๋ ํ์์ด ํ์ํ์ง ์์ต๋๋ค. ํ์ฌ ํ์์ด ์๋ํ์ง ์๋ ๊ฒฝ์ฐ ๋ด์ฅํ ํ์๊ฐ ์๋ ํ์์ ๋ํ ๋ง์ ์ข์ ์ ๊ทผ ๋ฐฉ์์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์๊ฐ๋ ์ ์์ต๋๋ค.
์๋ ํ์ธ์ @charlesroddie , ํผ๋๋ฐฑ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
Shell์ด โโํ์ฌ ๊ทํ์๊ฒ ์ ํฉํ์ง ์์ ์ ์์ง๋ง ๊ด์ฐฎ์ต๋๋ค. ์ฑ์ ๊ฐ์น๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒฝ์ฐ Shell์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ๊ธด ํ์ง๋ง Shell ์ฌ์์ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ์ ํตํด ๋ง์ ์ ๋ณด๋ฅผ ์ป์ผ๋ฉฐ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ฐ๋ฆฌ ๋ชฉ์ ์ ํต์ฌ์ ๋๋ค.
ํ์ฌ Xamarin.Forms์์๋ TabbedPage, MasterDetailPage, ํญ ๋ฐ ๋ฉ๋ด ํญ๋ชฉ, ๋ค์ํ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ, ์ฝํ ์ธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฏธ ์ค๋ช ํ์ต๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์ฌ๊ธฐ์ ๋งํ๋ "๊ฑด์ถ"์ด ์๋ฏธํ๋ ๋ฐ์ ๋๋ค. Shell์ ์ด๋ฌํ ํจํด์ ๋จ์ํํ๊ณ ๋์ฒดํฉ๋๋ค(Shell ์ฌ์ฉ์ ์ ํํ ๊ฒฝ์ฐ).
"๋ชจ๋ฐ์ผ"์ ์๋ชป ์ธ์๋ ๊ฒ์ด ์๋๋ฉฐ ๋งค์ฐ ๊ณ ์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. Shell์ iOS ๋ฐ Android๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ๋ฐ์คํฌํฑ์ ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ Shell์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋๋ ๋ฐ์คํฌํฑ ๋ฐฑ์๋์ Shell ์ง์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํ ๊ธฐ์ฌ์๋ค์ ๊ด์ฌ์ ๋ค์๊ณ , ๊ทธ๋ฌํ PR์ ํธํ์ ๋ฐ์ ๊ฒ์ ๋๋ค. ์ ๋ Shell์ด โโ๋ชจ๋ ํ๋ซํผ์์ ์ฑ์ ์ฌ์ฉํ ์ ์๋ ๋งค์ฐ ์ข์ ์์น์ ์์ผ๋ฉฐ, ๊ธ๊ฒฉํ UI ํจํด ๋ณ๊ฒฝ์๋ ์ ์ํ ์ ์๋ ์ ์ฐ์ฑ(๋ณต์๋ ฅ)์ ๊ฐ๊ณ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค(๋๊ฐ ํฅํ ์ธํฐํ์ด์ค๊ฐ ์ฑํ๋ ์ง ์ ์ ์์). ์ค๋์ ์ํ์ฅ์ iOS์ Android์ ๋๋ค.
Shell์ ๋ํด ๊ฐ๋ฐ์์ ์ด์ผ๊ธฐ๋ฅผ ๋๋๋ฉด์ Shell ํ์์ด ๊ทธ๋ค์ด ์ค์ํ๊ฒ ์๊ฐํ๋ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋งจ ์์ ์๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค. ๋ผ์ฐํ , ๋ฅ ๋งํฌ, ํ์ ์ค๋จ ๊ธฐ๋ฅ, ๋ฐฑ ์คํ ์ฆ์ ์ค๋ช , ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐ ํ์ด์ง ์ง์ฐ ๋ก๋ฉ์ ์ค๋๋ ๊ฒฝํํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ๋งค๋ ฅ์ ์ธ ์์ฑ์ ๋๋ค.
๋ฐ์คํฌํฑ์ ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ Shell์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค... Shell์ ๋ชจ๋ ํ๋ซํผ์์ ์ฑ์ ์ฌ์ฉํ ์ ์๋ ๋งค์ฐ ์ข์ ์์น์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
Xamarin์ด ์์ฒด ๋ฌด๊ฒ๋ก ๋ฌด๋์ง๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. Shell์ด โโ๋ชจ๋ ํ๋ซํผ์ ๋๋ฌํ ๋๊น์ง ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ ์ดํ์๋ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋์ฒดํ๋ ๊ฒ์ด ์๋๋ผ ์ถ๊ฐ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ ๋ง์ ์ฌ๋๋ค์ด ๋ถ๋ช ํ ํฌ๋ก์ค ํ๋ซํผ ํ๋ ์์ํฌ๋ฅผ ์ฑํํ๋ ค๊ณ ํ๋ ์๊ธฐ์ ๋ฐ์คํฌํ ๊ฐ๋ฐ์์๊ฒ ๋ฉ์์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
Xamarin์ CSS์ ๊ฐ์ ๋ง์ ๊ธฐ๋ฅ ํฌ๋ฆฌํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ ์กฐ์ง์ ์ผ๋ถ ์์ฌ ๊ฒฐ์ ๊ถ์๊ฐ ์ด ์ ์ ์ดํดํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
Xamarin์ด ์์ฒด ๋ฌด๊ฒ๋ก ๋ฌด๋์ง๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. Shell์ด โโ๋ชจ๋ ํ๋ซํผ์ ๋๋ฌํ ๋๊น์ง ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ ์ดํ์๋ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋์ฒดํ๋ ๊ฒ์ด ์๋๋ผ ์ถ๊ฐ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ ๋ง์ ์ฌ๋๋ค์ด ๋ถ๋ช ํ ํฌ๋ก์ค ํ๋ซํผ ํ๋ ์์ํฌ๋ฅผ ์ฑํํ๋ ค๊ณ ํ๋ ์๊ธฐ์ ๋ฐ์คํฌํ ๊ฐ๋ฐ์์๊ฒ ๋ฉ์์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
Xamarin์ CSS์ ๊ฐ์ ๋ง์ ๊ธฐ๋ฅ ํฌ๋ฆฌํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ ์กฐ์ง์ ์ผ๋ถ ์์ฌ ๊ฒฐ์ ๊ถ์๊ฐ ์ด ์ ์ ์ดํดํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๋์ํ๋ค. ๊ธฐ๋ฅ์ด ๋ฐ์คํฌํฑ(UWP)์์ ์ง์๋์ง ์์ผ๋ฉด ์๋ฌด ์์ฉ์ด ์์ต๋๋ค. CSS์ ๋ํด์๋ ๋์ํฉ๋๋ค. ์ด์ ์๋ ํ ์ ์์๋ ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋ํ ๋ณต์ก์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋ง์ด ์ถ๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ค๋ฅธ ๋ฌด์๋ณด๋ค ํจ์ฌ ๋ ํ์ํ ๊ฒ์ ๋ชจ๋ ํ๋ซํผ์ ๋ํ ๋ ๋ง์ ์ ์ด์ ๊ธฐ์กด ์ ์ด์ ๋ํ ๋ ๋ง์ ๊ธฐ๋ฅ์ ๋๋ค. Shell์ ์ฌ์ ํ โโ์์ ํ ์ฑํํด์ผ ํ๊ฑฐ๋ ์ ํ ์ฌ์ฉํ ์ ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฃจํธ ์์ค์์๋ง ์๋ํ ์ ์๋ค๋ ์ ์์ Page ์ธํ๋ผ์ ๋์ผํ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฟ๋ง ์๋๋ผ ์ด์ ๋์ผํ ์์ ์ ์ํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ ๋ณต์กํ๊ณ ํผ๋์ค๋ฝ์ต๋๋ค. ๋ฐ๋ผ์ ์์ ์ฌ์ฉํ์ง ์๊ณ ํ๋ผ์ด์์ ๋ฉ๋ด๋ง ๊ฐ๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ธ ํญ๋ชฉ์ด ๋งคํ๋๋ ์ปจํธ๋กค์ ์์ด ๊ทนํ ์ ํ๋์ด ์์ต๋๋ค. ํญ, ํ์ ํ์ด์ง ๋ฐ ํ๋ผ์ด์์๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. Xamarin Forms๊ฐ UWP์ ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ๊ด๋ฒ์ํ ์ปจํธ๋กค์ ์ ๊ณตํ ์ ์๊ณ UWP์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปจํธ๋กค ์งํฉ์ผ๋ก ๋ ธ์ถ๋๊ณ ์ธ๋ฐ์๋ ํฝ์ฐฝ(์: CSS)์ด ์๋ค๋ฉด ์ ๋ ๊ธฐ์ ๊ฒ์ ๋๋ค.
๋๋ ๋น์ ์ด ๋ช ๊ฐ์ง ํ๋นํ ์ ์ ์ง์ ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง, UWP/iOS/Android ์ฑ์ ์ ์ง ๊ด๋ฆฌํ๋ ์ฌ๋์ผ๋ก์ Shell์ด โโUWP๋ฅผ ์ง์ํ์ง ์๊ณ ๋ฏธ๋์๋ "์๋ง๋"๋ง ์ง์ํ๋ค๋ ๊ฒ์ ์์์ ๋ ์ฝ๊ฐ ์ค๋งํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋๋ Shell์ ์์ ์ ๋์น๊ณ ์์์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๋ ๋๊ตฐ๊ฐ๊ฐ ๋ ๊ฐ์ง ์ฃผ์ ๋ชจ๋ฐ์ผ ํ๋ซํผ์ฉ ์ฑ์ ๊ตฌ์ถํ๋ ์์ฃผ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค. ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์๋ก์ ... UWP๊ฐ ํ์ํ๊ณ XF๋ฅผ ๊ณ ๋ คํ๊ธฐ ์ํด UWP ์ง์์ด ์์ ๋๊น์ง ๊ธฐ๋ค๋ ธ์ต๋๋ค ... ํ์ง๋ง ๋ง์ ๊ฐ๋ฐ์๊ฐ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค ... ๋ํ ๋ ๋ณต์กํ ํ์ ๋ฑ์ด ํ์ํฉ๋๋ค. ์์ด ์ ๊ณตํฉ๋๋ค.
ํ์ง๋ง ํ์๊ณผ ํ์ด์ง๋ฅผ ์์ํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ๋ณด๋๋ ๊ธฐ์ต์ด ๋ฉ๋๋ค. ์์๋ด๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ ๋ํ ๋งค์ฐ ๋ณต์กํ LOB(Line of Business) ์ฑ์ ๋ง๋ค๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ ์์ค์ ๋ณต์ก์ฑ์ด ํ์ํ์ง ์์ ์๋ง์ ๊ฐ๋จํ ์ฑ์ด ์์ต๋๋ค. XF๋ Flutter ๋ฑ๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๋ํญํ์ฌ ์์ฑํ๊ธฐ ์ํด ์งํํด์ผ ํฉ๋๋ค. ๋ํ ์๋ก์ด ๊ฐ๋ฐ์๋ค์ด ๊ทธ๊ฒ์ ์ฑํํ๋๋ก ๊ณ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ซํผ์ ์ฌ์ฉํ๋ฉด ํ๋ซํผ์ ์ ์ง ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ UWP๊ฐ ํ์ํ์ง ์์ ํฅํ ํ๋ก์ ํธ๊ฐ ๋ช ๊ฐ ์๋๋ฐ Shell์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ์ ์ํ ์ ์์ ๊ฒ์ผ๋ก ์๊ฐํ๊ธฐ ๋๋ฌธ์ ํด๋น ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค.
์ ๋ 2.3 ๋ฆด๋ฆฌ์ค ์ดํ๋ก XF๋ง ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์คํ ํด์ผ ํ ์ผ์ด ๋ ๋ง์ง๋ง... ํ์ฌ ์กด์ฌํ๋ ํ๋ซํผ์ ํฌ๊ฒ ์์ ํ๋์์ต๋๋ค...์ ์ด๋ ์ ์๊ฒ๋...๊ทธ๋์ ๊ฑฑ์ ํ์ง ์์ต๋๋ค. ์ถ๊ฐ ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ญ์ฌ์ ์ผ๋ก XF ํ์ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ๋งค์ฐ ์์ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค... ๊ทธ๋์ ๋๋ ๊ทธ๋ค์ด ๊ทธ๊ฒ์ ํต์ ํ๊ณ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค.
ํ๋ซํผ์ ์ถ๊ฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์์ ์ ์ํํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๋ฉด ์ด์ ๋ฐฉ๋ฒ์ด ๊ฐ์น๊ฐ ๋จ์ด์ง๊ณ ์ด์ ๋ฌธ์๊ฐ ์ ๊ฑฐ๋ ๋๊น์ง ์๋ก์ด ๊ฐ๋ฐ์๋ฅผ ํผ๋์ค๋ฝ๊ฒ ํฉ๋๋ค.
Flutter๋ ํจ์ฌ ๊ฐ๋จํฉ๋๋ค. ๋งํฌ์ ์ธ์ด๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ฝ๋์ ์์ต๋๋ค. Xamarin์ ๋ ๋ณต์กํ๊ณ ๋ฒ๊ทธ๊ฐ ๋ง์ ๊ฒฝ์ํ์ง ์์ต๋๋ค. ๋์ผํ ์ด์ ์ผ๋ก Flutter(๋ ๋ง์ ํ๋ซํผ)๋ณด๋ค ๋ ๋ง์ ์์ ์ ์ํํ์ฌ ๊ฒฝ์ํ ๊ฒ์ ๋๋ค.
์ด Core์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ค์ ์ ๋๊ณ ๊ธฐ๋ณธ ํด๋์ค ์ด์ธ์ ํ์ด์ง ๋๋ ์ ธ์ ํฌํจํ์ง ์๊ณ XAML ๋๋ CSS ๋๋ ์์ฑ ๋ฐ์ธ๋ฉ์ ํฌํจํ์ง ์๋ Xamarin.Core๊ฐ ํ์ํ ์์ ์ ์ด๋ฅด๋ ์ต๋๋ค. ์ผ๋ถ ๊ฐ๋ฐ์๊ฐ ํ์ฌ ๋ฒ๊ทธ ๋น์จ์ ์์ฉํ๋ ๋น์ฉ์ผ๋ก ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์๋ Xamarin.Extensions๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ ์ ์ํํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๋ฉด ์ด์ ๋ฐฉ๋ฒ์ด ๊ฐ์น๊ฐ ๋จ์ด์ง๊ณ ์ด์ ๋ฌธ์๊ฐ ์ ๊ฑฐ๋ ๋๊น์ง ์๋ก์ด ๊ฐ๋ฐ์๋ฅผ ํผ๋์ค๋ฝ๊ฒ ํฉ๋๋ค.
Flutter๋ ํจ์ฌ ๊ฐ๋จํฉ๋๋ค. ๋งํฌ์ ์ธ์ด๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ฝ๋์ ์์ต๋๋ค. Xamarin์ ๋ ๋ณต์กํ๊ณ ๋ฒ๊ทธ๊ฐ ๋ง์ ๊ฒฝ์ํ์ง ์์ต๋๋ค. ๋์ผํ ์ด์ ์ผ๋ก Flutter(๋ ๋ง์ ํ๋ซํผ)๋ณด๋ค ๋ ๋ง์ ์์ ์ ์ํํ์ฌ ๊ฒฝ์ํ ๊ฒ์ ๋๋ค.
์ด Core์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ค์ ์ ๋๊ณ ๊ธฐ๋ณธ ํด๋์ค ์ด์ธ์ ํ์ด์ง ๋๋ ์ ธ์ ํฌํจํ์ง ์๊ณ XAML ๋๋ CSS ๋๋ ์์ฑ ๋ฐ์ธ๋ฉ์ ํฌํจํ์ง ์๋ Xamarin.Core๊ฐ ํ์ํ ์์ ์ ์ด๋ฅด๋ ์ต๋๋ค. ์ผ๋ถ ๊ฐ๋ฐ์๊ฐ ํ์ฌ ๋ฒ๊ทธ ๋น์จ์ ์์ฉํ๋ ๋น์ฉ์ผ๋ก ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์๋ Xamarin.Extensions๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@charlesroddie ์์์ ์ํํ ์์
์ XAML์ ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ ๊ฒ์ด
์ฝ๋ฉ๋ UI๊ฐ Xamarin.Forms๋ก ๊ฐ๋ฅํ์ง ์๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก Re Flutter๋ ๋งค์ฐ ํ๋ฅญํ์ง๋ง ๋ฌธ์ ๋ iOS ๋ฐ Android๋ฟ์ ๋๋ค. macOS, Windows 7/8.1 ๋ฐ Linux๋ฅผ ๋์์ผ๋ก ํด์ผ ํ๋ฏ๋ก ์ ์๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค. Xamarin.Forms๋ฅผ ๋ฅ๊ฐํ๋ ๊ฒ์ ์์ต๋๋ค!
์ฌ์ฉ์ ์ ์ ๋ณด๊ธฐ๋ฅผ ๋ง์คํฐ ํ์ด์ง๋ก ์ค์ ํ ์ ์์ต๋๊น? ํฌํจํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. MenuItem ๋๋ ํ์ด์ง๋ง ์ ํธํ์ง๋ ์์ต๋๋ค.
Xamarin Mac ๋ฐ uwp ์ง์?
ํ์ ํ๋ก์ธ์ค์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ์๊ฒ ์ต๋๊น? ์๊ณ ๊ณ์๊ฒ ์ง๋ง Prism์ ์๋ก ๋ค๋ฉด ๋ทฐ ๋ชจ๋ธ์ DI ์ปจํ ์ด๋์ ์ํด ์์ฑ๋๊ณ ์๋์ผ๋ก ์์ฒญ๋ ํ์ด์ง์ ๋ํ BindingContext๋ก ์ค์ ๋ฉ๋๋ค.
๋ณด๊ธฐ ๋ชจ๋ธ์ INavigatedAware
๋ฅผ ๊ตฌํํ๊ณ ๋ฐ์ดํฐ ๋ก๋, ์๋น์ค ํ์ฑํ/๋นํ์ฑํ ๋ฑ๊ณผ ๊ฐ์ ํน์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฒ๋ฆฌํ ์๋ ์์ต๋๋ค.
๋น์ทํ ๊ฒ์ ์ถ๊ฐํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ์ถ์ธก์ OnNavigating
๋ฐ OnNavigated
Shell ์ด๋ฒคํธ์์ง๋ง Current
๋ฐ Target
๋ ShellItem์ ๋
ธ์ถํ์ง ์์ผ๋ฏ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ท์น์ ๋ฐ๋ผ BindingContext๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋ทฐ ๋ชจ๋ธ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๊น?
์ด์ ๋ํ ์ ์ ์ฌํญ์ด ์์ต๋๊น?
ํธ์ง: #5166์ ์ํด ์ถ์ ๋จ.
์ด ์์ ์์ด์ฝ์ ๊ทธ๋ฆผ ๋์ "์์ด์ฝ ๊ธ๊ผด"์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์ฌ์ง์ ๋ฐํ์ ์ค ์์ ๋ณ๊ฒฝ์ด ์ด๋ ต๊ณ ํ๋ซํผ์ ๋ฐ๋ผ ํด์๋๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. SkiaSharp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ ๋๋ง๋ Material Design ๊ธ๊ผด์ ์ฌ์ฉํ์ฌ ์์ด์ฝ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ์ ์ํ ์ ์์ต๋๊น? ์ด ํด๋์ค๋ ๋น๊ต์ ์ฝ๊ณ ์์์ ์ฌ์ฉํ ์ ์๋ ์์ด์ฝ์ ๋ง์ด ๋ง๋ค ๊ฒ์ ๋๋ค.
@vincentwx ๋์ํฉ๋๋ค. ์์ด์ฝ ๊ธ๊ผด์ ์ฌ์ฉํ๊ธฐ ํจ์ฌ ์ฝ๊ณ ์น์ํฉ๋๋ค.
@vincentwx @stevehurcombe ์ ๋์ ์ผ๋ก. ์ง๊ธ ์ฑ์์ ์ด ์์ ์ ์ํํ๊ณ ์์ต๋๋ค.
<ShellItem>
<ShellContent Title="Upcoming"
ContentTemplate="{DataTemplate pages:UpcomingPage}">
<ShellContent.Icon>
<FontImageSource Glyph="{x:Static local:IconFont.Rocket}"
FontFamily='{OnPlatform iOS="Font Awesome 5 Free", Android="fa-solid-900.ttf#Font Awesome 5 Free"}'
Size="18"/>
</ShellContent.Icon>
</ShellContent>
<ShellContent Title="Latest"
ContentTemplate="{DataTemplate pages:LatestPage}">
<ShellContent.Icon>
<FontImageSource Glyph="{x:Static local:IconFont.Book}"
FontFamily='{OnPlatform iOS="Font Awesome 5 Free", Android="fa-solid-900.ttf#Font Awesome 5 Free"}'
Size="18"/>
</ShellContent.Icon>
</ShellContent>
<ShellContent Title="Company"
ContentTemplate="{DataTemplate pages:CompanyPage}">
<ShellContent.Icon>
<FontImageSource Glyph="{x:Static local:IconFont.Building}"
FontFamily='{OnPlatform iOS="Font Awesome 5 Free", Android="fa-solid-900.ttf#Font Awesome 5 Free"}'
Size="18"/>
</ShellContent.Icon>
</ShellContent>
</ShellItem>
์ด๊ฒ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ธ๋ฆฌํ์ ์ ์ ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค. https://andreinitescu.github.io/IconFont2Code/
iOS ์์์ ์์ ํด์ผ ํ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. #5071
Xamarin Mac ๋ฐ uwp ์ง์?
์ง๊ธ์ @mdonogma๊ฐ ์๋๋๋ค. ์ฐ๋ฆฌ๋ ์ถ๊ฐ ํ๋ซํผ ์ง์์ ๋ํ ๊ด์ฌ/์์๋ฅผ ๋ชจ์ผ๊ณ ์์ง๋ง ํ์ฌ๋ก์๋ ๋ก๋๋งต์ ์์ต๋๋ค.
@davidortinau ์ฝ๋์ ๋งํฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
Android 8.0์์๋ Shell Content์์ ํธ์คํ
๋๋ WebView
์์์์ ์น ํ์ด์ง๋ฅผ ์คํฌ๋กคํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Xamarin Shell ์์ด๋ ์ ์๋ํฉ๋๋ค.
์๋ง๋ฆฐ ์์ 4.0.0.135214-pre4
ํ๋จ ํญ๊ณผ ์ ๋ชฉ ๋ณด๊ธฐ์ FontFamily๋ฅผ ๋ณ๊ฒฝํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@varyamereon ์ด์ ๊ทธ๋ฌ์ด์. FontFamily๋ฅผ ์ค์ ํ ์ ์๋๋ก ์
ธ์ ํ์ฅํฉ๋๋ค.
๋ด ํ์ฅ๋ Shell์ GitHub์ ๊ณง ๊ฒ์ํ ์์ ์ด์ง๋ง:
์ฌ์ฉ์ ์ง์ ์ ธ ๋ง๋ค๊ธฐ:
<Shell
x:Class="X.Mobile.App.Features.AppShell.AppShell"
๊ทธ๋ฐ ๋ค์ Shell ์ฌ์ฉ์ ์ง์ ๋ ๋๋ฌ๋ฅผ ๋ง๋ญ๋๋ค.
[assembly: ExportRenderer(typeof(AppShell), typeof(AppShellRenderer))]
namespace X.Mobile.App.iOS.Renderers
{
[Preserve(AllMembers = true)]
public class AppShellRenderer : ShellRenderer
{
protected override IShellItemRenderer CreateShellItemRenderer(ShellItem item)
{
return new CustomMenuRenderer(this)
{
ShellItem = item
};
}
๊ทธ ๋ค์์:
namespace X.Mobile.App.iOS.Renderers
{
[Preserve(AllMembers = true)]
public class CustomMenuRenderer : ShellItemRenderer
{
private SKCanvasView _skiaSharpPaintView;
public CustomMenuRenderer(IShellContext context) : base(context)
{
}
public override void ViewDidLoad()
{
}
public override void ViewWillLayoutSubviews()
{
{
๊ทธ๋ฐ ๋ค์ ๊ธ๊ผด ํจ๋ฐ๋ฆฌ๋ฅผ ์ค์ ํ๋ ค๋ฉด: _(์์ฃผ ํ์ง ๋ง์ธ์)_
var txtAttributes = new UITextAttributes
{
Font = UIFont.FromName("MyriadPro-Semibold", 12.0F)
};
foreach (var uiTabBarItem in TabBar.Items)
{
uiTabBarItem.SetTitleTextAttributes(txtAttributes, UIControlState.Normal);
}
์๋์์ ํ์ ์ ์ง์ํ์ฌ Shell์ ํ์ฅํ ์ฌ๋(ํ๋จ ์ํธ)์ด ์์ต๋๊น?
๋๋ ๋ง์ ์ฝ๋๋ฅผ ๋ด ์ด์ Shell์์ ์ Shell(๋ฌผ๋ก ๊ตฌ์ฑ)๋ก ์ฎ๊ฒผ์ต๋๋ค. ์ ๋ง ๋ง์์ ๋ญ๋๋ค. 5์์ ์ถ์๋ ์ฑ์๋ ์ฌ์ฉํฉ๋๋ค :-) (Xamarin ์ฝ๋๋ ๋๋ฒ๊น ํฉ๋๋ค)
๋ชฉ๋ก์ Shell.MenuItems์ ๋ฐ์ธ๋ฉํ๋ ๊ธฐ๋ฅ์ด ์ง์๋ฉ๋๊น? ์๋๋ฉด BindableLayout์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ชฉ๋ก์ ๋ก๋ํ๊ณ ์ด๋ฅผ ๋ฉ๋ด๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ณด๊ธฐ๋ ๊ฐ์ง๋ง ์ ํํ ๋ฉ๋ด์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
์ ธ์ ์ฌ์ฉํ ๋ Android์์ OffscreenPageLimit์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ด๊ฒ์ ๋ถํํ๊ฒ๋ ๋ด ์ฑ์ ๋งค์ฐ ์ค์ํ๋ฉฐ ๋ด๊ฐ Shell์ ์ฌ์ฉํ๋ ๋ฐ ๋ฐฉํด๊ฐ ๋ฉ๋๋ค.
๊ฐ์ฌ ํด์!
๋ช ๊ฐ์ง ๊ธฐ๋ฅ ์์ฒญ:
์
ธ ์์ค์์ ๋ชจ๋ ํ์ด์ง ์ ๋ชฉ์ ๋ํด FontFamily๋ฅผ ์ค์ ํฉ๋๋ค.
์
์
ธ ์์ค์์ ๋ชจ๋ ํ์ด์ง ์ ๋ชฉ/ํ์ ๋ง๋ ๋ฑ์ ๋ํ ์ ๋ชฉ/ํ์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
์
GroupBehavior๋ pre4์์ ์๋ํ์ง ์์ต๋๋ค.
<ShellItem GroupBehavior="ShowTabs" FlyoutIcon="stuff.png" Title="Discussion">...
๊ฒฐ๊ณผ:
xxx/Shell/Shell.xaml(14,14): ์ค๋ฅ: ์์น 108:14. 'GroupBehavior'์ ๋ํ ์์ฑ, ๋ฐ์ธ๋ฉ ๊ฐ๋ฅํ ์์ฑ ๋๋ ์ด๋ฒคํธ๊ฐ ์๊ฑฐ๋ ๊ฐ๊ณผ ์์ฑ ๊ฐ์ ์ ํ์ด ์ผ์นํ์ง ์์ต๋๋ค.
GroupHeaderTemplate์ ์๋ฌด ์์ ๋ ์ํํ์ง ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด๋ป๊ฒ ์ฌ์ฉ๋๊ฑฐ๋ ํ์ฑํ๋๋์ง ํ์คํ์ง ์์ต๋๋ค.
MenuItems.Add(item)๋ฅผ ํตํด ํญ๋ชฉ์ ์ฑ๊ณต์ ์ผ๋ก ์ถ๊ฐํ๋ MenuItems๋ฅผ ์ถ๊ฐ/์ ๊ฑฐํ๋ ค๊ณ ํ์ง๋ง ํ๋ผ์ด์์์ด ๋ค์ ํ์๋ ๋ ๊ฒฐ๊ณผ๊ฐ ํ์๋์ง ์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋๊น?
๋๋ ์กฐ์ ๋ฉ๋ด ์์ดํ ์ ๋ํ ์ธ๊ธ์ด ํ์๋์ง ์์ง๋ง, ์ ธ ๊ฑฐ์ ์ธ๋ชจ๊ฐ ๋์๊ฒ (๊ทธ๋ฆฌ๊ณ ๋๋ ์์ @puppetSpace์ ํฌํจํ์ฌ, ๋ค๋ฅธ ์ฌ๋์ ๋ง์ด ์๊ฐํ๊ณ ์์ด์)์ด ํญ๋ชฉ์ด ์ ์ง ๋์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ ์๋ค๋ฉด.
cs ํ์ผ์์ ์ ธ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค๋ dbwelch์ ์๊ฒฌ์ ๋์ํฉ๋๋ค. ๋ฉ๋ด ํญ๋ชฉ๋ฟ๋ง ์๋๋ผ ShellItems & ShellSections์๋ ์ ์ฉ๋ฉ๋๋ค.
ํ๋ผ์ด์์์ ์ผ๊ณ ๋ฉ๋ด ํญ๋ชฉ์ ์ถ๊ฐํ๋ฉด Android์์ ํ๋ฒ๊ฑฐ ๋ฉ๋ด๊ฐ ํ์๋๊ณ iOS์์๋ ํด๋น ์ง์ ์ ํด๋ฆญํ๋ฉด ์๋ํ์ง๋ง ์์ด์ฝ์ด ์์ต๋๋ค. ์ด๋ค ์์ด๋์ด?
@KyleTraynor ์ด์ ๋ํ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. 3bar.png ๋ฐ [email protected] ์ด๋ฏธ์ง๋ฅผ iOS ๋ฆฌ์์ค ํด๋์ ์๋์ผ๋ก ๋ณต์ฌํ๊ณ ํ๋ก์ ํธ์ ๋ฒ๋ค ํญ๋ชฉ์ผ๋ก ํฌํจ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
์ถ์ฒ์์ ์ฐพ์ ์ด๋ฏธ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@melucas ๋์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ทธ๊ฒ์ ๊ณ ์น๋ ค๊ณ ๋ฏธ์ณ ๊ฐ๊ณ ์์๋ค. ์ ์๋ํฉ๋๋ค.
Shell์ ์ฌ์ฉํ ๋ Android์ฉ OffscreenPageLimit์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?
1 ShellSection ๋ด๋ถ์ 4๊ฐ์ ShellContents๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ์์ ํญ ํ์ด์ง๊ฐ ์์ผ๋ฉฐ iOS์์๋ ํ๋ฅญํ๊ฒ ์๋ํ์ง๋ง Android์์๋ ์ํ์ง ์๋ ํ์ด์ง๋ฅผ ๊ต์ฒดํ ๋ ํ์ด์ง๊ฐ ๋ค์ ๋ก๋๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ด ๊ณ ์ ์ ํญ ํ์ด์ง๋ฅผ ์ฌ์ฉํ์ฌ OffscreenPageLimit์ ์ค์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง Shell์์๋ ์ด๋ฅผ ์ํํ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
@davidortinau ํ์ด์ง ์ ๋ชฉ, ํ๋จ ๋ฐ ์๋จ ํญ์ ๊ธ๊ผด ๋ชจ์์ ์ค์ ํ๋ ์ต์ ์ด ์์ต๋๊น? ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ธ๊ผด์ ๋ณ๊ฒฝํ๋ ค๋ฉด ios ๋ฐ android์ฉ ์ฌ์ฉ์ ์ง์ ๋ ๋๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ํ๋ผ์ด์์ ์ ธ์์ ํญ๋ชฉ์ ์ค์ ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ํ ๋ด ๊ฒ์๋ฌผ์ ๋ํ ์๋ต์ด ์์๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฅ์ด ๋ฒ์ ๋ด์ ์์ง ์๊ฑฐ๋ ๋ฒ๊ทธ๋ก ๊ฐ์ฃผ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ง์งํ ์ฑ์ด ์ด ๊ธฐ๋ฅ ์์ด ์ด๋ป๊ฒ ์ด ์ ธ์ ์ฌ์ฉํ ์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋งค์ฐ ๊ฐ๋จํ ์ฑ๋ง์ด ์ฌ์ฉ์์ ์ปจํ ์คํธ(์ฆ, ์ธ์ฆ๋จ/๋น์ธ์ฆ๋จ) ๋๋ b) ๋ค์ ์ค ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ๋ด์์ ํญ๋ชฉ์ ์ถ๊ฐ/๋ณ๊ฒฝ/์ ๊ฑฐ/๋นํ์ฑํํ ์ ์๋ ๊ธฐ๋ฅ์ด ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ์๊ตฌํ๋ค.
@jassmith ๊ฐ ๊ถ๊ธํฉ๋๋ค. ์ฌ์์ ๋ง๋ ์ฌ๋๋ค์ด ์ด ํฌ๋ผ์ ์ฐธ์ฌํ์ต๋๊น? ์๋๋ฉด ๊ฐ๋ฐ์ ํผ๋๋ฐฑ์ ์ํ ๊ฒ์ ๋๊น?
Btw, ์ด ํ๋์ ์ฃผ์ ํญ๋ชฉ ์ธ์ ํ ์ฑ์ ์ฝ๋์ Shell์ ๊ตฌํํ์ผ๋ฉฐ ๋งค์ฐ ์ ์๋ํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค! ๊ทธ๋ฌ๋ ์ฌํ๊ฒ๋ Shell์ ์ด ๊ธฐ๋ฅ์ด ์๋/๊ตฌํ๋์ง ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ๊บผ๋ด์ ์์ฒด ํ๋ผ์ด์์์ ๊ตฌํํด์ผ ํฉ๋๋ค.
@dbwelch , ๋ช ๊ฐ์ง.
์ฌ์์ ๊ฒ์ํ๊ณ ์์ผ๋ฏ๋ก ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ต์ ๋ฐ์ง ๋ชปํ ๊ฒ์
๋๋ค. ๋ํ Jason์ ๋ ์ด์ Forms ์์
์ ํ์ง ์์ผ๋ฏ๋ก ๊ทธ๋ฅผ ๋ถ๋ฅด๋ ๊ฒ์ ๋ฌด์๋ฏธํฉ๋๋ค.
๊ฒฐ๋ก , ๋ฌธ์ ์ ๊ธฐ
@dbwelch @ChaseFlorell ์ฌ๊ธฐ์์ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค. https://github.com/xamarin/Xamarin.Forms/issues/5428
@davidortinau ํ์ด์ง ์ ๋ชฉ, ํ๋จ ๋ฐ ์๋จ ํญ์ ๊ธ๊ผด ๋ชจ์์ ์ค์ ํ๋ ์ต์ ์ด ์์ต๋๊น? ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ธ๊ผด์ ๋ณ๊ฒฝํ๋ ค๋ฉด ios ๋ฐ android์ฉ ์ฌ์ฉ์ ์ง์ ๋ ๋๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
@jamiewest ๊ธฐ๋ฅ ์์ฒญ์ ์ ์ถํ์ธ์! ๊ฐ์ฌ ํด์! https://github.com/xamarin/Xamarin.Forms/issues/new?assignees=&labels=t%2Fenhancement+%E2%9E%95&template=feature_request.md&title=%5BEnhancement%5D+YOUR+IDEA%21
UseSwipeGesture ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๊น?
์ด์ ShellItem ํด๋์ค์๋ ์๋ํ ShellAppearance ์์ฑ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด์ Android์์๋ TabPage์ ๋ค๋ฅธ Shell์ ํญ(TabPage๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์์ดํํ ์ ์์)
<ShellItem.ShellAppearance>
<MaterialShellAppearance NavBarCollapseStyle="Full" TabBarCollapseStyle="Full" UseSwipeGesture="false">
</ShellItem.ShellAppearance>
@jingliancui , Cui ํ์ ๋, qq๋ WeChat์ด ์์ต๋๊น?
@juepiezhongren ์๋ ํ์ธ์, ์ ์ ์ฑํ ํ๊ธฐ ์ํด ์ด qq ๊ทธ๋ฃน์ ๊ฐ์ ํ ์ ์์ต๋๋ค 313308215
RTM์์ UWP์ ๋ํ Shell ๋ฐ ์๊ฐ์ ์ง์์ด ์ ๊ณต๋ฉ๋๊น?
ํ์ ํ์ด์ง, ๋ง์คํฐ-์ธ๋ถ ์ฌํญ ํ์ด์ง ๋ฑ์ผ๋ก ์์ ํ๋ ๊ฒ์ด ๋ณต์กํ๊ฒ ๋๊ปด์ง๊ธฐ ๋๋ฌธ์ ๋ ์ด๋ ค์์ง๋ ๊ฒ๊ณผ ์๊ด์์ด ์ด ์์ด๋์ด๋ฅผ ํ์ํฉ๋๋ค. ์๋ง๋ ์ด๊ฒ์ ๋ด๊ฐ ์น ๋ฐฐ๊ฒฝ์์ ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค(๋ค์ดํฐ๋ธ API๋ก ๋ง์ด ์์ ํ์ง ์์). ํ์ ๋ชจ์, ํ์ด์ง ์ ๋ชฉ, ๋ค๋ก ๋ฒํผ, ๋๊ตฌ ๋ชจ์ ํญ๋ชฉ, ๋จธ๋ฆฌ๊ธ ๋ฐ ๋ฐ๋ฅ๊ธ(ListView) ๋ฑ์ ์ฌ์ฉ์ ์ง์ ํ๋ฉด ์ฌ๊ธฐ์์ ๋ ์ค๋ฆ ๋๋ค.
๋ด๊ฐ ์์ฒญํ๋ ๊ฒ์ *Shell๊ณผ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ฌ์ฉ์ ์ ์ ๋ฐ ํ์ฅ์ฑ์ ์ผ๋์ ๋๊ณ ์ ๊ณต๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ฒ๋ณด๊ธฐ์ ๋จ์ํ ์ผ์ ์ํํ๊ธฐ ์ํด ์ผ๋ จ์ ๋ ๋๋ฌ, ๋์, ํธ๋ฆฌ๊ฑฐ ๋ฑ์ ๋ง๋ค ํ์๊ฐ ์๋ ์ํฉ์ ๊ฑฐ์ ์์์ต๋๋ค.
์ฌ๋ฌ๋ถ์ด ๋ฌด์์ ์๊ฐํด ๋ด๋ Xamarin.Forms ์ฑ์ ๋ค๋ฅธ ๊ธฐ๋ณธ ์ฑ์ฒ๋ผ ๋ฉ์ง๊ฒ ๋ง๋ค ์ ์๋๋ก ์ต์ ์ ๋คํ์ธ์! ์ด ๊ธฐ๋ฅ์ ํ๋์ ์ธ XForms ์ฑ์ ์ํ ๋ ๋์ ๋ฐ์นํจ๋๋ฅผ ์ ๊ณตํ ๊ฒ ๊ฐ์ต๋๋ค!
์ฌ์์ ์ถ์ธกํ ํ์ ์์ด ์ด ์ ธ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ ์ ์๋ ์์ค ์ฝ๋๊ฐ ์์ต๋๊น? ์๋ฅผ ๋ค์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ๋ฒ๊ฑฐ ์์ด์ฝ์ ์์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํ์ผ์ ๋๋ค. ์ฃ์กํฉ๋๋ค. C#/Xamarin์ ์๋ก์ด ๊ธฐ๋ฅ์ด์ง๋ง ์ฝ๋๋ฅผ ์ด๋๊ฐ์์ ๋ณผ ์ ์๋ค๋ฉด ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
@dbwelch ์ฌ๊ธฐ GitHub์์ ์์ค ์ฝ๋๋ฅผ ์ฐพ์๋ณผ ์ ์์ต๋๋ค. ๊ด๋ จ ํด๋์ค๋ฅผ ๋ณด๋ ค๋ฉด "T"๋ฅผ ๋๋ฅด๊ณ Shell์ ์ ๋ ฅํ์ญ์์ค. ๊ทธ๋ฌ๋ C#/Xamarin์ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ด๊ฒ์ด ๊ฐ์ฅ ์ข์ ์ถ๋ฐ์ ์ด ์๋ ์ ์์ต๋๋ค. ๋ ๋ง์ ๋ฌธ์๋ฅผ ์ป์ ๋๊น์ง ์ํ ์ค ์ผ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
https://github.com/davidortinau/Gastropods
https://github.com/davidortinau/ShellGallery
https://github.com/davidortinau/TheLittleThingsPlayground
๋ฌธ์: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell?tabs=android
MSDN ๋ฌธ์: https://msdn.microsoft.com/en-us/magazine/mt848639
๋ธ๋ก๊ทธ: https://blog.xamarin.com/xamarin-forms-4-0-preview/
@davidortinau ๊ฐ์ฌํฉ๋๋ค. ํ์ง๋ง ๋ฐฉ๊ธ ์ถ์๋ ์ฝ๋๋ผ๊ณ ์๊ฐํ๋๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋์ ๋๋ค. Shell ์ฝ๋๋ ์ด๋์ ์์ต๋๊น? 4.0, Shell ๋ฑ์ ๋ถ๊ธฐ ์๋๋ฅผ ์ดํด๋ณด์์ง๋ง ์ ์๊ฒ ์จ๊ฒจ์ ธ ์์ต๋๋ค! ๊ฐ์ฌ ํด์!
@dbwelch https://github.com/xamarin/Xamarin.Forms/search?q=shell&unscoped_q=shell
์๋ฅผ ๋ค์ด Shell.cs๋ ์ฌ๊ธฐ์ ์์ต๋๋ค.
@pauldipietro ๊ฐ์ฌํฉ๋๋ค. ์ง๊ธ ๋ณด์ธ์. @davidortinau ์ค์ ๋ก ๋ชจ๋ ๋งํฌ(๋ด๊ฐ ๋ฐฉ๊ธ ๋ค์ด๋ก๋ํ LittleThings ์ ์ธ)์ ๋ง์ ์๊ฐ์ ๋ณด๋์ง๋ง ํ๋ฒ๊ฑฐ ์์ด์ฝ ์์๊ณผ ๊ฐ์ ๊ฐ๋จํ ๊ฒ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๋ด ์ฑ์์ ๋ณด๋ผ์์ผ๋ก ํ์๋์ง๋ง (๋ด๊ฐ ๋ณผ ์ ์๋) ์ด๋์๋ ์ ์๋ ๋ณด๋ผ์์ด ์์ต๋๋ค. ์ฝ๊ฐ ์ค๋ง ;-).
์ ๋ฐ์ดํธ: ๋ฐฉ๊ธ ๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๋ค. ๋ฌผ๋ก FinishedLaunching์ TintColor๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ์กด์ฌํ๋ ์ด์ํ ์ฝ๋์ ๋๋ค. ๋!
์ ์ฌ ์ฌ๋ฌ๋ถ, ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
ํ๋ผ์ด์์ ํจ๋์ ๋ช ๊ฐ์ง ํญ๋ชฉ์ด ํ์๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ์ด๋ฏธ Shell ํญ๋ชฉ(ํญ๋ชฉ ๋ด์ฉ ์๋)์ ์จ๊ธฐ๊ฑฐ๋ ํ์ํ์ง ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ContentPage๊ฐ ์๊ณ Shell ๋ด๋ถ์ ํ์ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์ถ์ต๋๋ค.
<local:DetailPage />
ํ๋ผ์ด์์ ํจ๋/๋ชฉ๋ก์ ํญ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ชฉ์ด ์์ผ๋ฉด ํญ๋ชฉ์ ๋น ์คํ/์๋ฆฌ ํ์์๊ฐ ์์ต๋๋ค. ๋๋ ์ฌ์ ํ ์ด์ด์๋ ํญ๋ชฉ์ ์จ๊ธฐ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํ์ต๋๋ค. ์๋ง๋ ๋๊ตฐ๊ฐ๊ฐ ๋์์ ์ค ์ ์๊ฑฐ๋ ๊ธฐ๋ฅ์ ์์ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จธ๋ฆฌ๋ง: ๋๋ newb atm์ ๋๋ค. ๋์ง ์์ผ๋ ค๊ณ ํฉ๋๋ค.
@davidortinau ๊ทธ๋์, ์ฐ๋ฆฌ ํ์ฌ์ ์ฒซ ๋ฒ์งธ Xamarin.Forms ํ๋ก์ ํธ์ ํ์ ๋ฑ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ด Shell ๊ธฐ๋ฅ์ ๋ฐฐ์ฐ๋ ค๊ณ ๋ ธ๋ ฅํด ์์ผ๋ฉฐ(woot!) ํต๊ณผํ ์ ์๋์ง ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์๋ก์ด ๋ผ์ฐํ ๊ธฐ๋ฅ์ ํตํด ShellItem์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ๋๋ ๋ ๋ง์ ๋งค๊ฐ๋ณ์. ์ด๊ฒ ๋ณ ์ผ์ ๋๊น? ์๋๋ฉด ๋์ MenuItem ์ปฌ๋ ์ ๋ด์์ MenuItem์ ์ฌ์ฉํ์ฌ ๋ช ๋ น์ ์ํํด์ผ ํฉ๋๊น? ํ๋ผ์ด์์ ์์ค์์ ํ๋ ์ด์์ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด MenuItem์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ๋์ MenuItem์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์ ธ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ฑ์ ๊ตฌ์ฑํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๊น? ๋ช ๋ น ๋งค๊ฐ๋ณ์์ ํจ๊ป MenuItem์ ์ฌ์ฉํ ๋ ์ด๋ฅผ ์์ง ์์ต๋๊น?
์ด ๋ง์ ํ ์ ์๋ ์ฌ๋์ด ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Shell์ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ๋ง์ ShellItem์ด ์ ์ฌํ ์ค๊ฐ ํ์ด์ง๋ก ์ด๋ํ์ฌ OrderType์ ๋ง๋ค ๊ฒ์ด๊ธฐ โโ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํด๋ฆญ ์ ์ ํํ ShellItem์ ํ๊ทธ๋ฅผ ์ง์ ํ์ฌ ContentTemplate ํ์ด์ง ๋๋ ์ ์ ํ ํญ๋ชฉ์ผ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ํ ๋ฐ ๋ถ์์ ๋ํ ์ ์ ํ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ธฐ๋ณธ ์ฃผ๋ฌธ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ธฐ ์ ์ ๋จผ์ OrderDepartment ๋๋กญ๋ค์ด ์ ํ์ ์ ํํฉ๋๋ค.
๋ํ ์ด๊ณณ์ด ์๋ชป๋ ๊ณณ์ด๋ผ๋ฉด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ๋ฐ๋ฅธ ์์น๋ฅผ ์๋ ค์ฃผ์ญ์์ค. ๊ฐ์ฌ ํด์!
์
๋ฐ์ดํธ:
์ง๊ธ์ MenuItems๋ฅผ ์ฌ์ฉํ๊ณ ShellViewModel์ ๋ช
๋ น ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ์ฌ ๋์ ํ์ด์ง์ ๋ํ ์ฌ๋ฐ๋ฅธ ๊ฐ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค. ์ด์ ์๊ฐํด ๋ณด๋ ContentTemplate ํ์ด์ง๋ก ํธ์ํ๋ MenuItem์์ ํญ ๊ตฌ์กฐ๋ก ์ด๋ํ ํ์๊ฐ ์์ต๋๋ค.
๋ํ ShellItem์ด ๋ชจ๋ ๋งจ ์๋ก ํ์ด๋์ค์ง ์๋๋ก ํ๋ผ์ด์์ ๋ด์์ MenuItem์ด ์๋ ์์น๋ฅผ ์ ์ํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ธ์ ๊ฐ MenuItem์ ์ปฌ๋ ์
์ ์ผ๋ถ๋ก ์ ์ํ์ง ์์๋ ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ShellItem๊ณผ ์์ผ ์ ์์ต๋๋ค.
MenuItem
ShellItem
ShellItem
MenuItem
ShellItem
MenuItem
...
๋๋ ShellItems๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์ ์๋ ๊ฒฝ์ฐ ์ด๋ ์์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์ ์๋๋ก ํฉ๋๋ค.
์ ๋ @anthcool ๊ณผ ํจ๊ป ์์ ์๊ฒ ๋์์ต๋๋ค. ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์๊ณ Shell ์ฌ์ฉ์ ์ค๋จํด์ผ ํ์ต๋๋ค. ํด๋ฆญํ ๊ฒ์ ์๊ธฐ ์ํด ์ฝํ ์ธ ํ์ด์ง์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ๋ฌํ ์ ์์ด์ผ ํฉ๋๋ค.
@anthcool ์ ํ์ฌ ๋ด๊ฐ ํ ๊ฒ์ฒ๋ผ ์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ์ ์์ ํ๊ณ ๋์์ ์ฃผ๋ ค๊ณ ํฉ๋๋ค. ์คํ ๋ชฉ๋ก์ผ๋ก readonly Stack<NavigationParameter>
๊ฐ ์๋ ํ์ ๋งค๊ฐ๋ณ์ ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค.
public class Navigation
{
readonly Stack<NavigationParameter> _stack = new Stack<NavigationParameter>();
...
public Stack<NavigationParameter> Parameters => _stack;
}
NavigationParameter๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class NavigationParameter : NameValueCollection { }
ํ์ํ ๋ ํธ์ ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์:
var p = new NavigationParameter { { nameof(SomePage), SomeObject } };
Navigation.Parameters.Push(p);
๋ค๋ฅธ ํ์ด์ง์์ ๊ฐ์ Peek ๋๋ Pop ํ๊ณ ํค๋ฅผ ํ์ธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์์ ๊ฐ์ ๊ฒ. ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@anthcool ์ ํ์ฌ ๋ด๊ฐ ํ ๊ฒ์ฒ๋ผ ์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ์ ์์ ํ๊ณ ๋์์ ์ฃผ๋ ค๊ณ ํฉ๋๋ค. ์คํ ๋ชฉ๋ก์ผ๋ก
readonly Stack<NavigationParameter>
๊ฐ ์๋ ํ์ ๋งค๊ฐ๋ณ์ ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค.public class Navigation { readonly Stack<NavigationParameter> _stack = new Stack<NavigationParameter>(); ... public Stack<NavigationParameter> Parameters => _stack; }
NavigationParameter๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class NavigationParameter : NameValueCollection { }
ํ์ํ ๋ ํธ์ ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์:
var p = new NavigationParameter { { nameof(SomePage), SomeObject } }; Navigation.Parameters.Push(p);
๋ค๋ฅธ ํ์ด์ง์์ ๊ฐ์ Peek ๋๋ Pop ํ๊ณ ํค๋ฅผ ํ์ธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์์ ๊ฐ์ ๊ฒ. ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@rizamarhaban ์์ด๋์ด ๊ฐ์ฌํฉ๋๋ค! ์ด์ ๋ํด ์๋ ค์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค! ์ฌ๊ธฐ์์ ๊ณง ํ์ธํ๊ฒ ์ต๋๋ค. ๋ค์ ํ ๋ฒ, ๊ฐ์ฌํฉ๋๋ค!
Shell๊ณผ Visual์ด UWP๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋งค์ฐ ์ค๋งํ์ต๋๋ค.
๊ณผ์ฐ ์ด ์คํ์ด ์์ฑ๋ ๊ฒ์ผ๊น?
์ด์ Tizen ๊ตฌํ์ด ์๋ค๋ ์ด์ ๋ง์ผ๋ก ์ด๊ฒ์ ๋ซ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
ํ์ ๊ธฐ๋ฅ์ด ์์ง ๊ฒํ ์ค์ด๋ผ๋ ์ธ์์ ๋ฐ์์ต๋๋ค.
์์ง UWP ์ง์์ด ์์ต๋๋ค. ๋ด๊ฐ Xamarin์ ๋ํด ๊ฐ์ง ๊ฐ์ฅ ํฐ ์ค๋ง.
@weitzhandler paul๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์. ์ด ๋ฌธ์ ์ UWP์ ๋ํด ์ผ๋ฐ์ ์ผ๋ก ๋ ผ์ํ๋ ค๋ฉด [email protected]์ผ๋ก ๋ฌธ์ํ์ธ์. ์ฐ๋ฆฌ๋ ํ๋ซํผ์ ์ ๊ทน์ ์ผ๋ก ๋ฌด์ํ์ง ์์ง๋ง Android ๋ฐ iOS๋ ์ด๊ธฐ ๊ตฌํ์ ๋ฐ๊ณ ์์ผ๋ฉฐ UWP์ ๋ํ Shell ์ง์์ ๋ํ ์กฐ์ฌ๊ฐ ํ๋ฐํ ์งํ ์ค์ ๋๋ค.
@mrlacey ์๋, ๊ฑฐ์ ์๋ฃ๋์ง ์์์ต๋๋ค! ๊ด๋ จ ๋ฌธ์ ๋ก ๊ณ์ ๋ซํ๋๋ค. ๐
UWP ์ง์์ ์์ฒญํ๋ ๋ชจ๋ ์ฌ๋๋ค์ ์ํด ๋ค์์ ์ฐธ์กฐ ํ์ต๋๋ค.
์ฝํ
์ธ ํ์ด์ง์์ ํ์ ๋ชจ์ ํ
ํ๋ฆฟ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
NavigationPage.TitleView๋ฅผ ์ง์ ํ๋ฉด ์ด์ ์ฒ๋ผ ์ ์ฉ๋์ง ์์ต๋๋ค.
์ฐธ๊ณ ์ฉ ๋ฆฌํฌ์งํ ๋ฆฌ:
https://github.com/InquisitorJax/Xamarin-Forms-Shell
ํธ์งํ๋ค:
Murphy๊ฐ ๋ค์ ๊ณต๊ฒฉํฉ๋๋ค. NavigationPage.TitleView ๋์ Shell.TitleView๋ฅผ ์ฌ์ฉํ์ธ์. :)
์๋
ํ์ญ๋๊น,
๋ด ์ ํ๋ก์ ํธ์์ ๋๋ Shell๊ณผ CollectionView๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ํ๋ฅญํ๋ค๊ณ ๋งํด์ผ ํฉ๋๋ค!
์์ ๋ํ ํ ๊ฐ์ง ์ง๋ฌธ
๊ณ ์ ํค๋(FlyoutHeader ๋ฐ FlyoutHeaderBehavior)๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง ํ๋จ ๋ฐ๋ฅ๊ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฐ์ฌ ํด์!
์๋
ํ์ญ๋๊น,
RegisterRoute์ ๋ํ ๋ ๋ค๋ฅธ ์ง๋ฌธ์ด ์์ต๋๋ค.
๋ด ์ฑ์ ํ์ด์ง ์๊ฐ ์๋นํ ๋ง๊ณ ์ฝ โโ30...
๊ฐ๊ฐ์ ๋ํด RegisterRoute๋ฅผ ์ถ๊ฐํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์
๋๊น?
Routing.RegisterRoute("blabla", typeof(BlaBlaPage));
...
...
์๋๋ฉด ๊ธฐ์กด ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น?
var blaPage = new BlaBlaPage ();
await Navigation.PushAsync (blaPage);
@matteopiccioni ์ด๋ ๊ฒ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Routing.RegisterRoute("blabla", typeof(BlaBlaPage));
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ
gotoasync("blabla")
์ง๊ธ์ ๋์ผํ๊ฒ ๋๊ปด์ง์ง๋ง ๊ธฐ๋ฅ์ด ์ปค์ง์ ๋ฐ๋ผ Shell ์์คํ ์ ํตํด ์ด๋ฌํ ๋ชจ๋ ํญ๋ชฉ์ ์๋ํ๋ ๊ฒ์ด ๋ ๊ด๋ จ์ฑ์ด ๋์์ง๋๋ค.
๊ฐ๊ฐ์ ๋ํด RegisterRoute๋ฅผ ์ถ๊ฐํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋๊น?
์ด๊ฒ์ด ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ ๋๋ค๋ฉด ์ฐ๋ฆฌ๋ ํ์ด์ง๋ฅผ ์ด์ ๋ธ๋ฆฌ ์ค์บํ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์ด๋ฌํ ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ ์ปดํ์ผ ์๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฒํ ํ๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ ๋ฌธ์ ๋ ๋ชจ๋ ์ ํ์ ๋ฆฌํ๋ ์ ์ด ์ฑ ์๋๋ฅผ ๋ฆ์ถ๋ฏ๋ก ์์ ์ ๋น์ฉ์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
@PureWeen ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค
๋๋ฆฐ ์์ ์๊ฐ์ xf(Android์ฉ)์์ ๊ฐ์ฅ ์ฑ๊ฐ์ ๋ฌธ์ ์ค ํ๋์
๋๋ค.
์์ํ ๋ ์ฒซ ๋ฒ์งธ ์์ค์ ํ์ด์ง(shellitems ํ์ด์ง)๋ง ๋ผ์ฐํ
์ ์ถ๊ฐํ๊ณ ์ฑ์ด ์์๋ ํ์๋ง ๋ค๋ฅธ ํ์ด์ง๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๊น(์ผ์ข
์ RegisterRoute ์ง์ฐ ๋ก๋ฉ)?
@matteopiccioni
๊ทธ๋์ ํ๋ฒ์ ์ด๋ ๊ฒ๋ง ํ๋ฉด
Routing.RegisterRoute("blabla", typeof(BlaBlaPage));
๊ด์ฐฎ์. ๋ด๊ฐ ๋งํ๊ณ ์ ํ๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ์ํํ ํ์๊ฐ ์๋๋ก ํ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌ์ถํ๋ฉด ์ฑ๋ฅ๊ณผ ๋น๊ตํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ํ์ฌ Routing.RegisterRoute("blabla", typeof(BlaBlaPage));
๋ ๋ฆฌํ๋ ์
์ ์ํํ์ง ์์ผ๋ฏ๋ก ํ ๋ฒ์ ๋ชจ๋ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ๋ ์ผ์ ์ฌ์ ์ ๋ฌธ์์ด๊ณผ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ๋ฟ์ ๋๋ค.
@jassmith @jamesmontemagno @pierceboggan ์์ฐ ๋ฉ์ง๋ค์ . Google Pixel์์ Pie SDK๋ฅผ ์ฌ์ฉํ๋ Google ์ฃผ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณธ ์ ์ด ์์ต๋๊น? ์ ๋ชฉ ํ์์ค์ด ์๊ณ ์ฑ ์๋จ์ ํตํฉ๋ ํ๋ฒ๊ฑฐ๊ฐ ์๋ UI/UX๊ฐ ๋ง์์ ๋ญ๋๋ค.
Google์ด ์ฐ๋ฝ์ฒ, ์ง๋ ๋ฐ ๊ธฐํ์ ํจ๊ป ์ฌ์ฉํ๊ณ ์๋ ํจํด์ด๋ฏ๋ก ์ด ์ ์์ Shell์ ๋ํด ๊ณ ๋ คํ ์ ์์ต๋๊น?
์ฌ๋ฌ๋ถ๊ณผ ์ฌ๋ฌ๋ถ์ ๊ท์คํ ์๊ฐ๊ณผ ๋ฐฐ๋ ค์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค,
์นผ
๋ค๋ฐ๋ฅด๋ ๋ชจ๋ ์ํ์ ์ฌ์์ ๋ค๋ฅธ ๊ณณ์์ ๋ ผ์๋๋ ํ ํ๋ฆฟํ๋ ShellContent๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ContentTemplate๊ณผ ํจ๊ป ShellContents๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์์ ์ ๋ชจ๋ ํ์ด์ง๊ฐ ๋ก๋๋์ด ์์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด ์ํ์ ํ์ต์ฉ์ ๋๋ค.
๋คํํ ContentTemplates์ ํจ๊ป ShellContents๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๊ฒฐํฉ๋๋ค.
[...]
์ ธ ์ฌ์ฉ์ ์ฃผ์ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์คํ์ ์์ํ ๋ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ก๋ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๋ง์ ์์ ์ฝํ ์ธ ํ์ด์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ด ๋๊ท๋ชจ ํ๋ฐํธ๋ก๋ ํ ๋น์ผ๋ก ์ธํด ์์ ์ฑ๋ฅ์ด ์๋นํ ์ ํ๋ ์ ์์ต๋๋ค. ์ด ํ ํ๋ฆฟ์ ์์ ํ๋ ค๋ฉด ๊ฐ๋ฅํ ํ ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค.
๋์๊ฒ ์ด๊ฒ์ ์ฝํ ์ธ ๋ฅผ ์ง์ ์ฌ์ฉํด์๋ ์๋๊ณ ํ ํ๋ฆฟ์ ์ฌ์ฉํด์๋ ์๋๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ด๊ฒ์ ๋์๊ฒ ์๋ฏธ๊ฐ ์๋๋ฐ ์ ์ง์ ์ฝํ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ง์ํฉ๋๊น? (๋จ์ํจ๊ณผ๋ ๋ณ๊ฐ๋ก, ์ฌ๋๋ค์ด ๋ฐ์ ์ด์ ์๊ฒ ํฉ๋๋ค). ์ผ์ข ์ ์ง์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด "๋ฐ๋ชจ๋ฅผ ํ ๋ ํ๋ฅญํ์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉด ๋์ฐํ" ๊ธฐ๋ฅ์ธ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์๋
ํ์ธ์,
๋ ์ฌ๊ธฐ ์ฒ์์ด์ผ. ์ฌ๊ธฐ๊ฐ ์ง๋ฌธํ๊ธฐ์ ์ ํฉํ ๊ณณ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ง๋ฌธํ ๊ณณ์ ์๋ ค์ฃผ์ธ์.
์์์ ์ง์ ํ ์ํ๊ณผ ๋น์ทํ ์์
์ ์๋ํ์ต๋๋ค.
<ShellItem Title="My music" ItemsSource="{x:Bind MyMusicModels}" TabLocation="Bottom">
<ShellItem.ItemTemplate>
<local:MyMusicItemTemplateSelection />
</ShellItem.ItemTemplate>
</ShellItem>
ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ค๋ฅ XLS0413 'ShellItem' ์ ํ์์ 'ItemsSource' ์์ฑ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ค๋ฅ XLS0415 'ShellItem' ์ ํ์์ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ์์ฑ 'ItemTemplate'์ ์ฐพ์ ์ ์์ต๋๋ค.
@Elashi ๊ทธ๋์ ์ฌ๊ธฐ์์์ด ์์ด๋์ด๋ฅผ ์
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/bindable-layouts
ShellItem์ผ๋ก?
@PureWeen ์ด ์์ด๋์ด๋ฅผ ์ฌ์ฉํ๊ณ
์ด ์์ด๋์ด๊ฐ ์์ง ๊ตฌํ๋์ง ์์์์ ์์ํ๊ณ ์์ต๋๊น?
์์ง ๊ตฌํ๋์ง ์์ ๊ฒฝ์ฐ ์์
์ ๊ด์ฌ์ด ์์ ์ ์์ต๋๋ค.
๊ตฌํ๋์ง ์์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค!
๋ด iPhone์์ ๋ณด๋ธ
2019๋ 5์ 5์ผ ์ค์ 11์ 59๋ถ์ Elashi < [email protected] [email protected] >์ด(๊ฐ) ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@PureWeen https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FPureWeen&data=02%7C01%7C%7C5a4c31a04c6541d6080608d6d172b36a%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636926687892526088&sdata=Y3%2Fxx %2BGt13FFjR5BCwdMg0UouarnTxI0%2FawrXtVEURM%3D&reserved=0 ์ด ์์ด๋์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์์ต๋๋ค :) .
์ด ์์ด๋์ด๊ฐ ์์ง ๊ตฌํ๋์ง ์์์์ ์์ํ๊ณ ์์ต๋๊น?
์์ง ๊ตฌํ๋์ง ์์ ๊ฒฝ์ฐ ์์
์ ๊ด์ฌ์ด ์์ ์ ์์ต๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fxamarin%2FXamarin.Forms%2Fissues%2F2415%23issuecomment-489439176&data์์ ํ์ธํ์ธ์. = 02ํผ์ผํธ 7C01 % 7C % 7C5a4c31a04c6541d6080608d6d172b36a % 7C84df9e7fe9f640afb435aaaaaaaaaaaa % 7C1 % 7C0 % 7C636926687892536099 ๋ฐ SDATA = RdPBMt9fPqsPC1x0FlJ1MQzn8BK6m9lfg7nsT09YIN8 % ๋ฐ 3D = 0 ์์ฝ ๋๋ ์ค์ ์๊ฑฐ https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F% 2Fgithub.com % 2Fnotifications % 2Funsubscribe - ์ธ์ฆ์ %์ 2FAABUHE2I4F33TX2SZJE2RVDPT377JANCNFSM4EZ4GB5Q ๋ฐ ๋ฐ์ดํฐ = 02ํผ์ผํธ 7C01 % 7C % 7C5a4c31a04c6541d6080608d6d172b36a % 7C84df9e7fe9f640afb435aaaaaaaaaaaa % 7C1 % 7C0 % 7C636926687892546103 ๋ฐ SDATA = UXiXgRiTo4pAjJVraUqmJmYZibiWMdh9htX2SeFG4JM % ๋ฐ 3D = 0 ์์ฝ .
@Elashi ๊ทธ๋ ์ง ๋ ์์ง๋ง MVVM ์๋๋ฆฌ์ค์์ ์ ๋ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
๋ง์ฝ ๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์ผํ๊ณ ์ถ๋ค๋ฉด ๋น์ ์ด ์๊ฐํ๋ ๊ฒ์ ๊ธฐ๋ณธ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ง๋ค ์ ์์ต๋๊น?
๊ทธ๋์ ์ํ ์ฐฉ์ค๋ฅผ ํตํด ... ์ 3.2์ TheLittlePlayground์ ์ ์ค์ฒ์ ๋ํ ์ค๋ช ์ด ์์ง๋ง ํ์ ๋์ ์๊ฐ์ ํจํค์ง๊ฐ ์๋ ANDROID์์ ์ ์ค์ฒ๋ฅผ ์๋์ํฌ ์ ์์ต๋๋ค.
Shell + ์ ์ค์ฒ๊ฐ iphone์์๋ง ์๋ํ๋ค๋ ๋ฉ๋ชจ์์ ๋๋ฝ๋ ๊ฒ์ด ์์ต๋๊น?
@davidortinau ๋๋ ์ด๊ฒ์ด ๋จ์ง ์ผ๋ถ ์ฌ์
ํ์ฌ GroupHeaders๊ฐ ์๋ํ๋๋ก ํ ์ ์๊ธฐ ๋๋ฌธ์ FlyoutMenu๋ฅผ ์ฌ์์ ํ์ฌ 6๊ฐ์ ์ฃผ์ ๊ทธ๋ฃน์ผ๋ก ์ ๋ ฌํ ๋ค์ ๋ด๊ฐ ๋ฏธ๋ฆฌ ๊ฒฐ์ ํ ๊ฒฝ๋ก๋ก ๋๋ฅผ ์๋ดํ๋ FlyoutItems๋ก ๊ฐ๋ ์ฐฌ ํ์ ๋ฉ๋ด๋ฅผ ํ์ํ๋ ค๊ณ ํฉ๋๋ค.
๋ด ์ฌ์ฉ ์ฌ๋ก๋ ํ์ํ 50๊ฐ ์ด์์ ์ต์ ์ด ์๊ณ ์คํฌ๋กค ์ํ์ ๋๋ ๊ฒ์ด UI ์นํ์ ์ด์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ ์ต์ ์ ๊ฐ์ฅ ์ค์ํ ํ ๋ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ทธ๋ฃน์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด UI/UX ๊ด์ ์์ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ ๋๋ค.
๊ฐ๋ฐ/์์ฐ ์ธก๋ฉด์์ ๊ทธ๊ฒ์ด ์ด๋์ ์๋์ง ๋ฐํ ์ ์์ต๋๊น? - ์๋๋ฉด ๋ด๊ฐ ๋ฐฐ์ธ ์ ์๋๋ก ๊ทธ๊ฒ์ ๊ตฌํํ๋ ์ฝ๋ ๋ฒ ์ด์ค์ ๋ฐฉํฅ์ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น? (์ ๋ Xamarin์ ์ฌ์ฉํ ์ง 1๊ฐ์๋ฐ์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค ์ค ์ผ๋ถ๋ ์์ง ์์ํฉ๋๋ค).
@TheBaileyBrew
๋ฐฉ๊ธ ๊ทํ์ ์๋๋ฆฌ์ค์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ผ๋ก ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ฒ์ํ์ต๋๋ค. Shell์ ์๋์ง๋ง MasterDetailPage ์ค์ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
https://github.com/ishrakland/ListViewWithSubListView/
๋ํ, ๊ทธ๋ค์ ๋ง์ ์ฝ์ค ์๋ฃ๋ฅผ MSFT Learn์ผ๋ก ์ฎ๊ธฐ๊ณ ์ ๋ฐ์ดํธํ์ต๋๋ค. https://docs.microsoft.com/en-us/learn/browse/?products=xamarin ์์ ์ฐพ์ ์ ์์ต๋๋ค.
์์ ๋ด์ฉ์ ์คํํ๋ ค๊ณ ํฉ๋๋ค. ํ์ด์ ๋น๋๋ค. ํ์น์ ํ์ํฉ๋๋ค!
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, ๊ฐค๋ฌ๋ฆฌ ๋๋ ์ธ๋ถ ์ ์ฅ์์์ ํ์ผ์ด๋ ์ฌ์ง์ ์ ํํ๊ณ ์ถ์ต๋๋ค.
xamarin ์์ ๋๊ฐ ํ์ผ์ ์ ํํฉ๋๊น? ํ์ผ์ .PDF ํ์ฅ์์ผ ๋ฟ์
๋๋ค. NS
๋ ํ์ผ์ ๋ชจ๋ ์ ํํ์ญ์์ค. ํ๋์ ๋ฒํผ์ ์ฌ์ฉํ๋ฏ๋ก ๋์์ฃผ์ธ์!!!
2019๋ 5์ 23์ผ ๋ชฉ์์ผ 19:41 Anthony Cool [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@TheBaileyBrew https://github.com/TheBaileyBrew
๋ฐฉ๊ธ ๊ทํ์ ์๋๋ฆฌ์ค์ ์ ํฉํ ๊ฒ์ผ๋ก ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ฒ์ํ์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. Shell์ ์๋์ง๋ง MasterDetailPage์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์ ์๋ง.https://github.com/ishrakland/ListViewWithSubListView/
โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/xamarin/Xamarin.Forms/issues/2415?email_source=notifications&email_token=AK7KSYK4N3XIVP3IHOBE2P3PW3CKJA5CNFSM4EZ4GB52YY3PNVWWK3TUL52HS4DFHEXG43VMXXW
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AK7KSYI5XKMXD7FC7HZH45LPW3CKJANCNFSM4EZ4GB5Q
.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์กฐ๊ฑด์ ๋ฐ๋ผ ํญ์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. Xaml์ด ์๋ C#์ ์ฌ์ฉํ์ฌ Shell์ ํญ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฉ๋ด ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์ถ์ต๋๋ค.
@TheBaileyBrew
์ด๊ฒ์ด ๋น์ ์ด ์ฐพ๊ณ ์๋ ๊ฒ์
๋๊น?
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/flyout#flyout -display-options
@BeleShew ๊ทํ์ ์ง๋ฌธ์ ์๋ง๋ stackoverflow ๋๋ forum.xamarin.com์์ ๋ ์ ํฉํ ๊ฒ์ ๋๋ค.
@PWaliaDev ์์ ์ผ๋ถ์ธ ๋ค์ํ ํญ๋ชฉ ์ปฌ๋ ์ ์ ํตํด ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค.
Shell.Items.Add(์๋ก์ด ShellItem())
์๋ก์ด ShellItem().Items.add(์๋ก์ด ShellSection())
์๋ก์ด ShellSection().Items.Add(new ShellContent())
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ๊ฐ์ ํ์ง๋ง
https://github.com/xamarin/Xamarin.Forms/issues/5428
๋น์ ์ ์๋๋ฆฌ์ค์ ์ ํฉํ ๊น์?
@PureWeen -- ๊ทํ์ ๋งํฌ์ ๋ฐ๋ผ ํ์ ์ต์ ์ด ์ค์ ๋์ด ์์ง๋ง ์ ๊ฐ ๊ณ ๋ฏผํ๊ณ ์๋ ๊ฒ์ @BeleShew ๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๋ ๊ฐ๊น์ต๋๋ค(์ฌ์ฉ์๋ณ๋ก ํ๋ผ์ด์์ ํญ๋ชฉ ์์ฑ/์ ๊ฑฐ).
#5428 ์์ ์ ๋ด๊ฐ ๋ฌ์ฑํ๊ณ ์ ํ๋ ๋ฐ์ ๋ง์ ๊ฒ์ ๋๋ค.
๋ด ์ฑ์๋ ๋ค์ํ ์ญํ /์ก์ธ์ค ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์์ผ๋ฉฐ ๊ถํ์ด ์๋ ์ฌ์ฉ์์๊ฒ๋ง ๋ฉ๋ด ์ต์ ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ํ์ํด์ผ ํฉ๋๋ค(์ฌ์ฉ์๊ฐ _ ํ ์ ์๋ _ ํ ์๊ณ ํ ์ ์๋ ๊ฒ๋ง ํ์ํด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ผ๋ก ๋๊ณ ์์์ง๋ง ๋ด ๋ฉ๋ด ์ต์ ์ ๊ฒ์ฌํ๊ณ ์ด ์ฝ๋์ฒ๋ผ ์จ๊ธธ ์ ์๋์ง ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค. ๋ก๋ ์๊ฐ:
foreach (var item in this.Items)
{
if (item is FlyoutItem)
{
var removeSections = new List<ShellSection>();
var fi = item as FlyoutItem;
foreach (var child in fi.Items)
{
if (child.Route == "NOT_AUTHORIZED_KEY")
removeSections.Add(child);
}
foreach (var s in removeSections)
fi.Items.Remove(s);
}
}
Shell์ ์ด๋ก ์ ํ๋ฅญํ์ง๋ง ์ด๋ฌํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ค์ฉ์ ์ด์ง ์์ต๋๋ค.
๊ธฐ๋ฅ 1 ๋ฐ 2๊ฐ ์ ๊ณต๋ ๋๊น์ง ๋น์ฆ๋์ค ์งํฅ ์ฑ์์ Shell์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@Im-PJ ์ 1๋ฒ๊ณผ 2๋ฒ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ธ์? (๊ทธ๋ค์ ํ์คํ)
3์ด ์งํ ์ค์ด๋ฉฐ ์ฌ๊ธฐ ์์ ์ถ์ ์ค์ ๋๋ค.
App Shell ํญ์์ ํญ ์ด๋ฒคํธ๋ฅผ ์ป์ ์ ์๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
๊ด๋ จ ํฌ๋ผ ์ง๋ฌธ: https://forums.xamarin.com/discussion/159748/app-shell-pop-to-root-on-tab-tap
@Im-PJ์ ์ ์ ์ผ๋ก ๋์ํ๊ณ ์ด๋ฌํ ๊ธฐ๋ฅ์ด ๊ตฌ์ฒด์ ์ผ๋ก ์ ๊ณต๋์ง ์๋ ๋ฐฉ๋ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ด๊ฒ์ Shell๊ณผ ๊ฐ์ ๋๊ตฌ์ ์ฃผ๋ ์ด์ ์ ๋๋ค. ๋๊ตฌ๋ ์ฌ๋ผ์ด๋ ์์ ๋ฉ๋ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค!
@dotMorten ์๋ง๋ ๊ด๋ฒ์ํ C# ๋ฐ ํดํน์ ํตํด 1 ๋๋ 2๋ฅผ ์ํํ ์ ์์ง๋ง ์ฐพ์ ์ ์๋ ๋ฐํ์์ ์ ธ ํญ๋ชฉ ๋ฐ์ธ๋ฉ/๋นํ์ฑํ/์จ๊ธฐ๊ธฐ/์ถ๊ฐ์ ๋ํ
@์ํผ์ ์ด
์ด๊ฒ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์กฐ๊ธ ๋ ํ์ฅ ํ ์ ์์ต๋๊น?
์ฌ์ฉ์ ์ญํ ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์ ธ ํญ๋ชฉ ์ถ๊ฐ/์ ๊ฑฐ
๋ก๊ทธ์ธ/๋ก๊ทธ์์ ์๋๋ฆฌ์ค
ํ์ฌ ๋ก๊ทธ์ธ ํ์ด์ง์ ์๋ ๊ฒฝ์ฐ TabBar๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํ๋ผ์ด์์ ํ์์ ์จ๊ฒจ ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ์๋๋ฆฌ์ค๋ฅผ ์ํํ ์ ์์ต๋๋ค.
<TabBar Route="LoggedOut">
<LoginPage>
</TabBar>
<FlyoutItem Route="LoggedIn"></FlyoutItem>
<FlyoutItem></FlyoutItem>
<FlyoutItem></FlyoutItem>
<FlyoutItem></FlyoutItem>
๋ก๊ทธ์ธ ํ์ด์ง์ ์๋ ๊ฒฝ์ฐ ์ด๋ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
IsVisible ๋ฐ์ธ๋ฉ ๊ฐ๋ฅ ์์ฑ์ ๋
ธ์ถํ๊ธฐ ์ํ ์์
์ด ์ฌ๊ธฐ์์ ์ํ ์ค์
๋๋ค.
https://github.com/xamarin/Xamarin.Forms/tree/shell_isvisible
PR์ ๋ง๋ค๊ธฐ ์ ์ ์ฝ๊ฐ์ ์์ ์ด ํ์ํฉ๋๋ค.
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ๊ฐ์ ๋ณ๋ ํ์ ๊ฒฝ๋ก.
ํ์ฌ ํ๋ ค๊ณ ํ๋ ๊ฒ๊ณผ ํ ์ ์๋ ๊ฒ์ ๋ํ ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น?
Xamarin.Form ์
ธ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋งํฌ ์ํ: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/flyout
๋์์ฃผ์ธ์. ์ ๋ณด ํ์ด์ง์ ํญ๋ฐ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋์์ ๋ ๊ฐ์ ์ ํ์ด์ง๊ฐ ํ์ํฉ๋๋ค.
ํ, ์ค์ , ๋ก๊ทธ์์ ๋ฑ์ ํ์ด์ง๊ฐ ์๋ ํ๋์ด์์ ๋ฉ๋ด์ฉ
์ง์์ ํธ์ํด์ผ ํ๋ ํญ ํ์ด์ง์ฉ
์ง๊ธ์ '์ค๋๋ ๋ฐฉ๋ฒ'์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋์์ ๋ ๊ฐ์ ์ ํ์ด์ง๊ฐ ํ์ํฉ๋๋ค.
ํ, ์ค์ , ๋ก๊ทธ์์ ๋ฑ์ ํ์ด์ง๊ฐ ์๋ ํ๋์ด์์ ๋ฉ๋ด์ฉ
์ง์์ ํธ์ํด์ผ ํ๋ ํญ ํ์ด์ง์ฉ
์ง๊ธ์ '์ค๋๋ ๋ฐฉ๋ฒ'์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Tabbedpage๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Flyout์ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฒ์๋ Flyout๊ณผ Tabbar๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค.
๋๋ ๋ชจ๋ ํ์ด์ง๋ฅผ
<shell>
<flyoutitem route="animals" flyoutdisplayoptions="AsMultipleItems">
<shellcontent route="cats"/>
<shellcontent route="dogs"/>
<shellcontent route="monkeys"/>
<shellcontent route="elephants"/>
<shellcontent route="bears"/>
<shellcontent route="about"/>
</flyoutitem>
</shell>
๋์์ ๋ ๊ฐ์ ์ ํ์ด์ง๊ฐ ํ์ํฉ๋๋ค.
ํ, ์ค์ , ๋ก๊ทธ์์ ๋ฑ์ ํ์ด์ง๊ฐ ์๋ ํ๋์ด์์ ๋ฉ๋ด์ฉ
์ง์์ ํธ์ํด์ผ ํ๋ ํญ ํ์ด์ง์ฉ
์ง๊ธ์ '์ค๋๋ ๋ฐฉ๋ฒ'์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.Tabbedpage๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Flyout์ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฒ์๋ Flyout๊ณผ Tabbar๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค.
ํ์ด์ง์ ํญ ํ์์ค์ด ํ์๋๋๋ก ๋ชจ๋ ํ์ด์ง๋ฅผ ์ ๋ฃ์์ง๋ง ํญ ํ์์ค์ 4๊ฐ์ ์์๋ง ๊ฐ๊ณ ์ถ์ต๋๋ค(๋ ๋ง์ ํญ์ ํ์ํ๊ณ ์ถ์ง ์์). ์ด๋ป๊ฒ ํ ๊น์?
<shell> <flyoutitem route="animals" flyoutdisplayoptions="AsMultipleItems"> <shellcontent route="cats"/> <shellcontent route="dogs"/> <shellcontent route="monkeys"/> <shellcontent route="elephants"/> <shellcontent route="bears"/> <shellcontent route="about"/> </flyoutitem> </shell>
๋ถํํ๋ ๋๋ Shell์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋์ผํ ์ฑ์ ์ฌ์ ํ MasterDetailPage์ TabbedPage๊ฐ ์์ต๋๋ค(iOS์์๋ Naxam.TopTabbedPage.Forms ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ์์ ํญ ํ์ด์ง๊ฐ ์์ต๋๋ค).
์ด๊ฒ์ ๋ด ์ค๋๋ ํฐ์ผ์ด์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๋ฌ๋ถ, ์ด์ Jason๊ณผ ์ ๋ ์ด ์ฌ์์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ์ผ๋ฉฐ ๋๊ท๋ชจ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์์ ์ด๋ฉฐ ์ด๋ฅผ ์ฌ๋ฌ ๋ฌธ์ ๋ก ๋ถํ ํ๊ณ ์์ต๋๋ค.