Xamarin.Forms Xamarin 네이티브 프로젝트에서
일반적으로 Xamarin.Forms 애플리케이션에는 파생된 ContentPage
페이지가 하나 이상 포함되며 이러한 페이지는 .NET Standard 라이브러리 프로젝트 또는 공유 프로젝트의 모든 플랫폼에서 공유됩니다. 그러나 Native Forms를 ContentPage
사용하면 파생된 페이지를 네이티브 Xamarin.iOS, Xamarin.Android 및 UWP 애플리케이션에 직접 추가할 수 있습니다. 네이티브 프로젝트가 .NET Standard 라이브러리 프로젝트 또는 공유 프로젝트에서 파생된 페이지를 사용하는 ContentPage
것과 비교했을 때, 네이티브 프로젝트에 직접 페이지를 추가하는 장점은 네이티브 보기로 페이지를 확장할 수 있다는 것입니다. 네이티브 뷰는 코드 숨김을 사용하여 x:Name
XAML에서 이름을 지정하고 참조할 수 있습니다. 네이티브 뷰에 대한 자세한 내용은 네이티브 뷰를 참조 하세요.
네이 Xamarin.FormsContentPage
티브 프로젝트에서 파생 페이지를 사용하는 프로세스는 다음과 같습니다.
- 네이 Xamarin.Forms 티브 프로젝트에 NuGet 패키지를 추가합니다.
- 네이
ContentPage
티브 프로젝트에 파생 페이지 및 모든 종속성을 추가합니다. Forms.Init
메서드를 호출합니다.- 파생 페이지의 인스턴스를
ContentPage
생성하고 iOS,CreateSupportFragment
Android 또는CreateFrameworkElement
UWP용 확장 메서드CreateViewController
중 하나를 사용하여 적절한 네이티브 형식으로 변환합니다. - 네이티브 탐색 API를
ContentPage
사용하여 파생 페이지의 네이티브 형식 표현으로 이동합니다.
Xamarin.Forms네이티브 프로젝트가 -derived 페이지를 생성하기 전에 메서드를 ContentPage
호출 Forms.Init
하여 초기화해야 합니다. 이 작업을 수행할 시기는 주로 애플리케이션 흐름에서 가장 편리한 시기에 따라 달라집니다. 애플리케이션 시작 시 또는 파생 페이지가 생성되기 직전에 ContentPage
수행할 수 있습니다. 이 문서 및 함께 제공되는 샘플 애플리케이션에서는 애플리케이션 Forms.Init
시작 시 메서드가 호출됩니다.
참고 항목
NativeForms 샘플 애플리케이션 솔루션에는 프로젝트가 포함되어 Xamarin.Forms 있지 않습니다. 대신 Xamarin.iOS 프로젝트, Xamarin.Android 프로젝트 및 UWP 프로젝트로 구성됩니다. 각 프로젝트는 네이티브 양식을 사용하여 파생 페이지를 사용하는 ContentPage
네이티브 프로젝트입니다. 그러나 네이티브 프로젝트가 .NET Standard 라이브러리 프로젝트 또는 공유 프로젝트에서 파생된 페이지를 사용할 ContentPage
수 없는 이유는 없습니다.
Native Forms, Xamarin.Forms 기능(예: DependencyService
, MessagingCenter
및 데이터 바인딩 엔진)을 사용하는 경우 모두 계속 작동합니다. 그러나 네이티브 탐색 API를 사용하여 페이지 탐색을 수행해야 합니다.
iOS
iOS에서 클래스의 재정의 FinishedLaunching
AppDelegate
는 일반적으로 애플리케이션 시작 관련 작업을 수행할 수 있는 위치입니다. 애플리케이션이 시작된 후에 호출되며 일반적으로 주 창 및 뷰 컨트롤러를 구성하도록 재정의됩니다. 다음 코드 예제에서는 샘플 애플리케이션의 AppDelegate
클래스를 보여줍니다.
[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
public static AppDelegate Instance;
UIWindow _window;
AppNavigationController _navigation;
public static string FolderPath { get; private set; }
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
Forms.Init();
// Create app-level resource dictionary.
Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
Xamarin.Forms.Application.Current.Resources = new MyDictionary();
Instance = this;
_window = new UIWindow(UIScreen.MainScreen.Bounds);
UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
{
TextColor = UIColor.Black
});
FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
NotesPage notesPage = new NotesPage()
{
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
UIViewController notesPageController = notesPage.CreateViewController();
notesPageController.Title = "Notes";
_navigation = new AppNavigationController(notesPageController);
_window.RootViewController = _navigation;
_window.MakeKeyAndVisible();
notesPage.Parent = null;
return true;
}
// ...
}
FinishedLaunching
메서드에서 수행하는 작업은 다음과 같습니다.
- Xamarin.Forms 는 메서드를 호출하여 초기화됩니다
Forms.Init
. - 새
Xamarin.Forms.Application
개체가 만들어지고 애플리케이션 수준 리소스 사전이 XAML에 정의된 것으로ResourceDictionary
설정됩니다. - 클래스에
AppDelegate
대한 참조는 필드에 저장됩니다static
Instance
. 이는 다른 클래스가 클래스에 정의된 메서드를 호출하는 메커니즘을AppDelegate
제공하기 위한 것입니다. - 네이
UIWindow
티브 iOS 애플리케이션의 뷰에 대한 기본 컨테이너인 이 컨테이너가 만들어집니다. - 속성은
FolderPath
메모 데이터가 저장될 디바이스의 경로로 초기화됩니다. NotesPage
XAML에 정의된 파생 페이지인 개체가 만들어Xamarin.FormsContentPage
지고 해당 부모가 이전에 만든Xamarin.Forms.Application
개체로 설정됩니다.NotesPage
개체는 확장 메서드를UIViewController
사용하여CreateViewController
변환됩니다.- 이 설정의
UIViewController
속성은Title
에UINavigationBar
표시됩니다. - 계층적 탐색을 관리하기 위해 A
AppNavigationController
가 만들어집니다. 에서 파생되는 사용자 지정 탐색 컨트롤러 클래스입니다UINavigationController
. 개체는AppNavigationController
뷰 컨트롤러 스택을 관리하며UIViewController
생성자에 전달된 개체는 로드될 때AppNavigationController
처음에 표시됩니다. - 개체는
AppNavigationController
최상위UIViewController
UIWindow
수준으로 설정되며 애플리케이션의UIWindow
키 창으로 설정되고 표시됩니다. Parent
개체의NotesPage
속성은 메모리 누수 방지를null
위해 설정됩니다.
메서드가 FinishedLaunching
실행되면 다음 스크린샷과 같이 클래스에 Xamarin.FormsNotesPage
정의된 UI가 표시됩니다.
Important
페이지의 속성이 개체로 설정된 경우 모든 ContentPage
파생 페이지는 애플리케이션 수준에서 ResourceDictionary
정의된 리소스를 Application
사용할 수 Parent
있습니다.
예를 들어 UI를 탭하여 + Button
UI와 상호 작용하면 코드 숨김 실행에서 NotesPage
다음 이벤트 처리기가 발생합니다.
void OnNoteAddedClicked(object sender, EventArgs e)
{
AppDelegate.Instance.NavigateToNoteEntryPage(new Note());
}
이 static
AppDelegate.Instance
필드를 사용하면 AppDelegate.NavigateToNoteEntryPage
다음 코드 예제에 표시된 메서드를 호출할 수 있습니다.
public void NavigateToNoteEntryPage(Note note)
{
NoteEntryPage noteEntryPage = new NoteEntryPage
{
BindingContext = note,
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
var noteEntryViewController = noteEntryPage.CreateViewController();
noteEntryViewController.Title = "Note Entry";
_navigation.PushViewController(noteEntryViewController, true);
noteEntryPage.Parent = null;
}
이 메서드는 NavigateToNoteEntryPage
-derived 페이지를 확장 메서드가 있는 UIViewController
페이지로 CreateViewController
변환Xamarin.FormsContentPage
하고 Title
UIViewController
. 그런 UIViewController
다음 메서드에 AppNavigationController
의해 푸시됩니다 PushViewController
. 따라서 다음 스크린샷과 같이 클래스에 Xamarin.FormsNoteEntryPage
정의된 UI가 표시됩니다.
NoteEntryPage
표시되면 뒤로 탐색이 해당 클래스의 NoteEntryPage
클래스를 AppNavigationController
팝 UIViewController
하여 사용자를 해당 클래스에 UIViewController
반환 NotesPage
합니다. 그러나 iOS 네이 UIViewController
티브 탐색 스택에서 팝하는 것은 연결된 개체를 UIViewController
Page
자동으로 삭제하지 않습니다. 따라서 클래스는 AppNavigationController
메서드를 PopViewController
재정의하여 뒤로 탐색에서 뷰 컨트롤러를 삭제합니다.
public class AppNavigationController : UINavigationController
{
//...
public override UIViewController PopViewController(bool animated)
{
UIViewController topView = TopViewController;
if (topView != null)
{
// Dispose of ViewController on back navigation.
topView.Dispose();
}
return base.PopViewController(animated);
}
}
재정의 Dispose
는 PopViewController
iOS 네이티브 탐색 스택에서 팝된 개체의 메서드 UIViewController
를 호출합니다. 이 작업을 수행하지 않으면 연결된 개체와 연결된 Page
개체가 UIViewController
분리됩니다.
Important
분리된 개체는 가비지 수집할 수 없으므로 메모리 누수가 발생합니다.
Android
Android에서 클래스의 재정의 OnCreate
MainActivity
는 일반적으로 애플리케이션 시작 관련 작업을 수행하는 위치입니다. 다음 코드 예제에서는 샘플 애플리케이션의 MainActivity
클래스를 보여줍니다.
public class MainActivity : AppCompatActivity
{
public static string FolderPath { get; private set; }
public static MainActivity Instance;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Forms.Init(this, bundle);
// Create app-level resource dictionary.
Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
Xamarin.Forms.Application.Current.Resources = new MyDictionary();
Instance = this;
SetContentView(Resource.Layout.Main);
var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
SupportActionBar.Title = "Notes";
FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));
NotesPage notesPage = new NotesPage()
{
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
AndroidX.Fragment.App.Fragment notesPageFragment = notesPage.CreateSupportFragment(this);
SupportFragmentManager
.BeginTransaction()
.Replace(Resource.Id.fragment_frame_layout, mainPage)
.Commit();
//...
notesPage.Parent = null;
}
...
}
OnCreate
메서드에서 수행하는 작업은 다음과 같습니다.
- Xamarin.Forms 는 메서드를 호출하여 초기화됩니다
Forms.Init
. - 새
Xamarin.Forms.Application
개체가 만들어지고 애플리케이션 수준 리소스 사전이 XAML에 정의된 것으로ResourceDictionary
설정됩니다. - 클래스에
MainActivity
대한 참조는 필드에 저장됩니다static
Instance
. 이는 다른 클래스가 클래스에 정의된 메서드를 호출하는 메커니즘을MainActivity
제공하기 위한 것입니다. - 콘텐츠는
Activity
레이아웃 리소스에서 설정됩니다. 샘플 애플리케이션에서 레이아웃은 조각 컨테이너 역할을 하는Toolbar
, 및FrameLayout
포함하는 것으로 구성됩니다LinearLayout
. - 검색
Toolbar
되어 작업 표시줄Activity
로 설정되고 작업 표시줄 제목이 설정됩니다. - 속성은
FolderPath
메모 데이터가 저장될 디바이스의 경로로 초기화됩니다. NotesPage
XAML에 정의된 파생 페이지인 개체가 만들어Xamarin.FormsContentPage
지고 해당 부모가 이전에 만든Xamarin.Forms.Application
개체로 설정됩니다.NotesPage
개체는 확장 메서드를Fragment
사용하여CreateSupportFragment
변환됩니다.- 클래스는
SupportFragmentManager
인스턴스를 forNotesPage
클래스로 대체하는FrameLayout
트랜잭션을Fragment
만들고 커밋합니다. Parent
개체의NotesPage
속성은 메모리 누수 방지를null
위해 설정됩니다.
조각에 대한 자세한 내용은 조각을 참조 하세요.
메서드가 OnCreate
실행되면 다음 스크린샷과 같이 클래스에 Xamarin.FormsNotesPage
정의된 UI가 표시됩니다.
Important
페이지의 속성이 개체로 설정된 경우 모든 ContentPage
파생 페이지는 애플리케이션 수준에서 ResourceDictionary
정의된 리소스를 Application
사용할 수 Parent
있습니다.
예를 들어 UI를 탭하여 + Button
UI와 상호 작용하면 코드 숨김 실행에서 NotesPage
다음 이벤트 처리기가 발생합니다.
void OnNoteAddedClicked(object sender, EventArgs e)
{
MainActivity.Instance.NavigateToNoteEntryPage(new Note());
}
이 static
MainActivity.Instance
필드를 사용하면 MainActivity.NavigateToNoteEntryPage
다음 코드 예제에 표시된 메서드를 호출할 수 있습니다.
public void NavigateToNoteEntryPage(Note note)
{
NoteEntryPage noteEntryPage = new NoteEntryPage
{
BindingContext = note,
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
AndroidX.Fragment.App.Fragment noteEntryFragment = noteEntryPage.CreateSupportFragment(this);
SupportFragmentManager
.BeginTransaction()
.AddToBackStack(null)
.Replace(Resource.Id.fragment_frame_layout, noteEntryFragment)
.Commit();
noteEntryPage.Parent = null;
}
메서드는 NavigateToNoteEntryPage
-derived 페이지를 확장 메서드가 있는 Fragment
페이지로 CreateSupportFragment
변환Xamarin.FormsContentPage
하고 조각 뒤로 스택에 추가합니다Fragment
. 따라서 다음 스크린샷과 Xamarin.FormsNoteEntryPage
같이 정의된 UI가 표시됩니다.
이 항목이 NoteEntryPage
표시되면 뒤로 화살표를 탭하면 조각 뒤 스택에서 해당 항목이 팝업 Fragment
NoteEntryPage
되고, 사용자가 Fragment
클래스에 대해 NotesPage
반환됩니다.
뒤로 탐색 지원 사용
클래스에는 SupportFragmentManager
BackStackChanged
조각 뒤로 스택의 내용이 변경 될 때마다 발생 하는 이벤트가 있습니다. 클래스의 MainActivity
메서드는 이 OnCreate
이벤트에 대한 익명 이벤트 처리기를 포함합니다.
SupportFragmentManager.BackStackChanged += (sender, e) =>
{
bool hasBack = SupportFragmentManager.BackStackEntryCount > 0;
SupportActionBar.SetHomeButtonEnabled(hasBack);
SupportActionBar.SetDisplayHomeAsUpEnabled(hasBack);
SupportActionBar.Title = hasBack ? "Note Entry" : "Notes";
};
이 이벤트 처리기는 조각 뒤로 스택에 하나 이상의 Fragment
인스턴스가 있는 경우 작업 표시줄에 뒤로 단추를 표시합니다. 뒤로 단추를 탭하는 응답은 재정의에 OnOptionsItemSelected
의해 처리됩니다.
public override bool OnOptionsItemSelected(Android.Views.IMenuItem item)
{
if (item.ItemId == global::Android.Resource.Id.Home && SupportFragmentManager.BackStackEntryCount > 0)
{
SupportFragmentManager.PopBackStack();
return true;
}
return base.OnOptionsItemSelected(item);
}
재정의는 OnOptionsItemSelected
옵션 메뉴의 항목을 선택할 때마다 호출됩니다. 이 구현은 뒤로 단추가 선택되어 있고 조각 뒤로 스택에 하나 이상의 Fragment
인스턴스가 있는 경우 조각 뒤 스택에서 현재 조각을 팝합니다.
여러 활동
애플리케이션이 여러 활동 ContentPage
으로 구성된 경우 파생된 페이지를 각 활동에 포함할 수 있습니다. 이 시나리오에서는 메서드를 Forms.Init
포함하는 Xamarin.FormsContentPage
첫 번째 Activity
메서드의 재정의에서 OnCreate
만 호출해야 합니다. 그러나 다음과 같은 영향을 미칩니다.
- 값
Xamarin.Forms.Color.Accent
은 메서드를 호출Forms.Init
한Activity
값에서 가져옵니다. - 값
Xamarin.Forms.Application.Current
은 메서드를 호출Forms.Init
한Activity
값과 연결됩니다.
파일 선택
ContentPage
HTML "파일 선택" 단추를 지원해야 하는 -derived 페이지를 사용하는 WebView
경우 메서드를 재정의 Activity
OnActivityResult
해야 합니다.
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
ActivityResultCallbackRegistry.InvokeCallback(requestCode, resultCode, data);
}
UWP
UWP에서 네이티브 App
클래스는 일반적으로 애플리케이션 시작 관련 작업을 수행할 수 있는 위치입니다. Xamarin.Forms는 일반적으로 인수를 OnLaunched
메서드에 Xamarin.Forms 전달하기 위해 UWP 애플리케이션의 네이티브 App
클래스 재정의 LaunchActivatedEventArgs
Forms.Init
에서 초기화됩니다. 이러한 이유로 파생 페이지를 사용하는 Xamarin.FormsContentPage
네이티브 UWP 애플리케이션은 메서드에서 App.OnLaunched
메서드를 가장 쉽게 호출할 Forms.Init
수 있습니다.
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
// ...
Xamarin.Forms.Forms.Init(e);
// Create app-level resource dictionary.
Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
Xamarin.Forms.Application.Current.Resources = new MyDictionary();
// ...
}
또한 이 메서드는 애플리케이션에 OnLaunched
필요한 애플리케이션 수준 리소스 사전을 만들 수도 있습니다.
기본적으로 네이티브 App
클래스는 애플리케이션의 MainPage
첫 번째 페이지로 클래스를 시작합니다. 다음 코드 예제에서는 샘플 애플리케이션의 MainPage
클래스를 보여줍니다.
public sealed partial class MainPage : Page
{
NotesPage notesPage;
NoteEntryPage noteEntryPage;
public static MainPage Instance;
public static string FolderPath { get; private set; }
public MainPage()
{
this.NavigationCacheMode = NavigationCacheMode.Enabled;
Instance = this;
FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));
notesPage = new Notes.UWP.Views.NotesPage
{
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
this.Content = notesPage.CreateFrameworkElement();
// ...
notesPage.Parent = null;
}
// ...
}
MainPage
생성자는 다음 작업을 수행합니다.
- 페이지에 대해 캐싱을 사용하도록 설정되므로 사용자가 페이지로 다시 이동할 때 새
MainPage
캐싱이 생성되지 않습니다. - 클래스에
MainPage
대한 참조는 필드에 저장됩니다static
Instance
. 이는 다른 클래스가 클래스에 정의된 메서드를 호출하는 메커니즘을MainPage
제공하기 위한 것입니다. - 속성은
FolderPath
메모 데이터가 저장될 디바이스의 경로로 초기화됩니다. NotesPage
XAML에 정의된 파생 페이지인 개체가 만들어Xamarin.FormsContentPage
지고 해당 부모가 이전에 만든Xamarin.Forms.Application
개체로 설정됩니다.- 개체는
NotesPage
usingCreateFrameworkElement
확장 메서드로FrameworkElement
변환된 다음 클래스의MainPage
콘텐츠로 설정됩니다. Parent
개체의NotesPage
속성은 메모리 누수 방지를null
위해 설정됩니다.
MainPage
생성자가 실행되면 다음 스크린샷과 같이 클래스에 Xamarin.FormsNotesPage
정의된 UI가 표시됩니다.
Important
페이지의 속성이 개체로 설정된 경우 모든 ContentPage
파생 페이지는 애플리케이션 수준에서 ResourceDictionary
정의된 리소스를 Application
사용할 수 Parent
있습니다.
예를 들어 UI를 탭하여 + Button
UI와 상호 작용하면 코드 숨김 실행에서 NotesPage
다음 이벤트 처리기가 발생합니다.
void OnNoteAddedClicked(object sender, EventArgs e)
{
MainPage.Instance.NavigateToNoteEntryPage(new Note());
}
이 static
MainPage.Instance
필드를 사용하면 MainPage.NavigateToNoteEntryPage
다음 코드 예제에 표시된 메서드를 호출할 수 있습니다.
public void NavigateToNoteEntryPage(Note note)
{
noteEntryPage = new Notes.UWP.Views.NoteEntryPage
{
BindingContext = note,
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
this.Frame.Navigate(noteEntryPage);
noteEntryPage.Parent = null;
}
UWP의 탐색은 일반적으로 인수를 Frame.Navigate
사용하는 메서드를 사용하여 Page
수행됩니다. Xamarin.Forms 는 Frame.Navigate
-derived 페이지 인스턴스를 사용하는 확장 메서드를 ContentPage
정의합니다. 따라서 메서드가 NavigateToNoteEntryPage
실행되면 다음 스크린샷과 Xamarin.FormsNoteEntryPage
같이 정의된 UI가 표시됩니다.
이 항목이 NoteEntryPage
표시되면 뒤로 화살표를 탭하면 앱 내 백 스택에서 해당 항목이 팝업 FrameworkElement
NoteEntryPage
되고, 사용자가 FrameworkElement
클래스에 대해 NotesPage
반환됩니다.
페이지 크기 조정 지원 사용
UWP 애플리케이션 창의 크기가 조정되면 콘텐츠 크기 Xamarin.Forms 도 조정되어야 합니다. 이 작업은 생성자에서 MainPage
이벤트에 대한 Loaded
이벤트 처리기를 등록하여 수행됩니다.
public MainPage()
{
// ...
this.Loaded += OnMainPageLoaded;
// ...
}
이 Loaded
이벤트는 페이지가 배치되고, 렌더링되고, 상호 작용할 준비가 되면 발생하며, 이에 대한 응답으로 메서드를 OnMainPageLoaded
실행합니다.
void OnMainPageLoaded(object sender, RoutedEventArgs e)
{
this.Frame.SizeChanged += (o, args) =>
{
if (noteEntryPage != null)
noteEntryPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
else
notesPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
};
}
메서드는 OnMainPageLoaded
이벤트에 대한 Frame.SizeChanged
익명 이벤트 처리기를 등록합니다. 이 처리기는 속성이 ActualWidth
변경Frame
될 때 ActualHeight
발생합니다. 이에 대한 응답으로 Xamarin.Forms 활성 페이지의 콘텐츠는 메서드를 호출하여 크기가 조정됩니다 Layout
.
뒤로 탐색 지원 사용
UWP에서 애플리케이션은 다양한 디바이스 폼 팩터에서 모든 하드웨어 및 소프트웨어 뒤로 단추에 대해 뒤로 탐색을 사용하도록 설정해야 합니다. 이 작업은 생성자에서 MainPage
수행할 수 있는 이벤트에 대한 BackRequested
이벤트 처리기를 등록하여 수행할 수 있습니다.
public MainPage()
{
// ...
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}
애플리케이션이 시작 GetForCurrentView
되면 메서드는 현재 뷰와 연결된 개체를 검색 SystemNavigationManager
한 다음 이벤트에 대한 BackRequested
이벤트 처리기를 등록합니다. 애플리케이션은 포그라운드 애플리케이션인 경우에만 이 이벤트를 수신하고, 이에 대한 응답으로 이벤트 처리기를 호출 OnBackRequested
합니다.
void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
e.Handled = true;
rootFrame.GoBack();
noteEntryPage = null;
}
}
OnBackRequested
이벤트 처리기는 애플리케이션의 루트 프레임에서 메서드를 호출 GoBack
하고 이벤트를 처리된 것으로 표시하도록 true
속성을 설정합니다BackRequestedEventArgs.Handled
. 이벤트를 처리된 것으로 표시하지 않으면 이벤트가 무시될 수 있습니다.
애플리케이션은 제목 표시줄에 뒤로 단추를 표시할지 여부를 선택합니다. 이 작업은 클래스에서 AppViewBackButtonVisibility
속성을 열거형 값 App
중 AppViewBackButtonVisibility
하나로 설정하여 수행됩니다.
void OnNavigated(object sender, NavigationEventArgs e)
{
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
((Frame)sender).CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}
OnNavigated
이벤트 발생에 대한 응답으로 Navigated
실행되는 이벤트 처리기는 페이지 탐색이 발생할 때 제목 표시줄 뒤로 단추의 표시 유형을 업데이트합니다. 이렇게 하면 앱 내 뒤로 스택이 비어 있지 않은 경우 제목 표시줄 뒤로 단추가 표시되거나 앱 내 뒤로 스택이 비어 있는 경우 제목 표시줄에서 제거됩니다.
UWP의 뒤로 탐색 지원에 대한 자세한 내용은 UWP 앱에 대한 탐색 기록 및 뒤로 탐색을 참조 하세요.