UWP 개발, Navigation

Universal Windows Platform (UWP) 개발에서 네비게이션은 사용자 경험의 핵심 요소입니다. 사용자는 다양한 화면과 데이터에 쉽게 접근하고 탐색할 수 있어야 합니다. 이번 글에서는 UWP 애플리케이션에서 네비게이션을 구현하는 방법과 그에 대한 다양한 기법들을 다루어보겠습니다.

1. UWP 네비게이션 이해하기

네비게이션은 애플리케이션 내에서 화면 간 전환을 의미하며, 사용자가 애플리케이션의 다양한 부분을 탐색할 수 있도록 합니다. UWP에서는 주로 Frame 클래스를 사용하여 페이지 간의 탐색을 관리합니다. 각 페이지는 Page 클래스를 상속받아 정의됩니다.

1.1 Frame과 Page

Frame은 페이지 간 전환을 제공하는 컨트롤입니다. 사용자는 Frame을 통해 새로운 페이지로 전환할 수 있으며, GoBackGoForward 메서드를 통해 이전 페이지로 돌아갈 수 있는 기능을 제공합니다.

1.2 페이지 생성

새로운 페이지를 만들려면, Visual Studio에서 Page 템플릿을 사용하여 파일을 생성하면 됩니다. 다음은 기본적인 페이지 클래스의 예제입니다:

using Windows.UI.Xaml.Controls;

namespace YourAppNamespace
{
    public sealed partial class SamplePage : Page
    {
        public SamplePage()
        {
            this.InitializeComponent();
        }
    }
}

2. 네비게이션 방법

UWP는 다양한 네비게이션 방법을 제공합니다. 가장 일반적인 방법은 다음과 같습니다:

  • 프레임을 통한 직접 네비게이션
  • 버튼 클릭 시 페이지 전환
  • 모델 바인딩을 통한 네비게이션

2.1 프레임을 통한 직접 네비게이션

프레임을 사용하여 다른 페이지로 직접 이동할 수 있습니다. 프레임 객체의 Navigate 메서드를 사용하여 페이지를 전환합니다. 아래 예제에서는 MainPage에서 SamplePage로 이동하는 방법을 보여줍니다:

private void NavigateToSamplePage()
{
    this.Frame.Navigate(typeof(SamplePage));
}

2.2 버튼 클릭 시 페이지 전환

사용자가 버튼을 클릭할 때 특정 페이지로 이동하도록 구현할 수 있습니다. 아래는 버튼 클릭 이벤트를 통해 페이지를 전환하는 예제입니다:

<Button Content="샘플 페이지로 이동" Click="NavigateButton_Click" />

private void NavigateButton_Click(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(SamplePage));
}

2.3 모델 바인딩을 통한 네비게이션

MVVM 패턴을 사용할 때, 뷰모델에서 명령을 통해 네비게이션을 구현할 수 있습니다. 아래는 ICommand 인터페이스를 사용하여 모델 바인딩을 통한 네비게이션 예제입니다:

using System.Windows.Input;

public class MainViewModel
{
    public ICommand NavigateCommand { get; private set; }

    public MainViewModel()
    {
        NavigateCommand = new RelayCommand(Navigate);
    }

    private void Navigate()
    {
        // 페이지 네비게이션 코드
    }
}

3. 후진 및 전진 네비게이션

UWP는 이전 페이지로 돌아가는 기능도 제공합니다. 사용자가 이전 페이지로 쉽게 돌아갈 수 있도록 하는 것은 사용자 경험을 향상시키는 중요한 요소입니다. Frame 클래스는 CanGoBackCanGoForward 속성을 통해 현재 네비게이션 히스토리의 상태를 확인할 수 있습니다.

if (this.Frame.CanGoBack)
{
    this.Frame.GoBack();
}

4. UWP 내비게이션의 예제 애플리케이션

이제 간단한 UWP 네비게이션 예제 애플리케이션을 만들어 보겠습니다. 이 애플리케이션은 두 개의 페이지를 가지고 있으며, 버튼 클릭을 통해 페이지를 전환합니다.

4.1 MainPage.xaml

<Page
    x:Class="YourAppNamespace.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:YourAppNamespace"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button Content="샘플 페이지로 이동" Click="NavigateButton_Click" />
    </StackPanel>
</Page>

4.2 SamplePage.xaml

<Page
    x:Class="YourAppNamespace.SamplePage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:YourAppNamespace"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="샘플 페이지" FontSize="24" />
        <Button Content="뒤로 가기" Click="GoBackButton_Click" />
    </StackPanel>
</Page>

4.3 MainPage.xaml.cs

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace YourAppNamespace
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void NavigateButton_Click(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(SamplePage));
        }
    }
}

4.4 SamplePage.xaml.cs

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace YourAppNamespace
{
    public sealed partial class SamplePage : Page
    {
        public SamplePage()
        {
            this.InitializeComponent();
        }

        private void GoBackButton_Click(object sender, RoutedEventArgs e)
        {
            if (this.Frame.CanGoBack)
            {
                this.Frame.GoBack();
            }
        }
    }
}

5. 결론

UWP 애플리케이션에서 네비게이션은 사용자 경험을 크게 향상시키는 요소입니다. FramePage를 이용하여 간편하게 여러 페이지로 전환할 수 있으며, 다양한 방법으로 사용자에게 직관적이고 유연한 탐색을 제공할 수 있습니다. 이 글에서 다룬 내용을 바탕으로 더 복잡한 애플리케이션에서도 유용하게 활용할 수 있을 것입니다.

6. 추가 자료

UWP 네비게이션에 대한 더 깊이 있는 내용을 원하신다면 다음 링크를 참조해 주세요: