NavigationService.FragmentNavigation 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
콘텐츠 조각 탐색이 시작될 때 발생하며, 원하는 조각이 현재 콘텐츠에 있는 경우 또는 원본 XAML 콘텐츠가 로드된 후 원하는 조각이 다른 콘텐츠에 있는 경우 즉시 발생합니다.
public:
event System::Windows::Navigation::FragmentNavigationEventHandler ^ FragmentNavigation;
public event System.Windows.Navigation.FragmentNavigationEventHandler FragmentNavigation;
member this.FragmentNavigation : System.Windows.Navigation.FragmentNavigationEventHandler
Public Custom Event FragmentNavigation As FragmentNavigationEventHandler
이벤트 유형
예제
다음 예제에서는 사용자 지정 조각 탐색 동작을 제공 하기 위해 처리 FragmentNavigation 하는 방법을 보여 있습니다. 이 경우 예제에서는 원본 XAML 페이지의 조각을 찾을 수 없는 경우 오류 XAML 페이지를 엽니다.
void NavigationService_FragmentNavigation(object sender, FragmentNavigationEventArgs e)
{
// Get content the ContentControl that contains the XAML page that was navigated to
object content = ((ContentControl)e.Navigator).Content;
// Find the fragment, which is the FrameworkElement with its Name attribute set
FrameworkElement fragmentElement = LogicalTreeHelper.FindLogicalNode((DependencyObject)content, e.Fragment) as FrameworkElement;
// If fragment found, bring it into view, or open an error page
if (fragmentElement == null)
{
this.NavigationService.Navigate(new FragmentNotFoundPage());
// Don't let NavigationService handle this event, since we just did
e.Handled = true;
}
}
Private Sub NavigationService_FragmentNavigation(ByVal sender As Object, ByVal e As FragmentNavigationEventArgs)
' Get content the ContentControl that contains the XAML page that was navigated to
Dim content As Object = (CType(e.Navigator, ContentControl)).Content
' Find the fragment, which is the FrameworkElement with its Name attribute set
Dim fragmentElement As FrameworkElement = TryCast(LogicalTreeHelper.FindLogicalNode(CType(content, DependencyObject), e.Fragment), FrameworkElement)
' If fragment found, bring it into view, or open an error page
If fragmentElement Is Nothing Then
Me.NavigationService.Navigate(New FragmentNotFoundPage())
' Don't let NavigationService handle this event, since we just did
e.Handled = True
End If
End Sub
설명
기본적으로 콘텐츠 조각은 특성이 설정된 명명 UIElementUIElementName 된 콘텐츠입니다. 다음은 그 예입니다.
<TextBlock Name="FragmentName">...</TextBlock>
다음 형식의 접미사가 있는 URI를 제공하여 XAML 조각으로 이동합니다.
# FragmentName
다음은 콘텐츠 조각을 참조하는 URI의 예를 보여 줍니다.
http://www.microsoft.com/targetpage.xaml#FragmentName
이벤트가 발생한 후 LoadCompleted 원본 페이지가 로드되면 조각 탐색이 시작되고 NavigationService XAML 조각을 찾으려고 시도합니다. XAML 조각이 발견 NavigationService 되면 콘텐츠 탐색기(NavigationWindow, Frame)에 조각을 표시하도록 지시합니다. 이 동작을 변경해야 하는 경우 고유한 조각 탐색 동작을 제공하기 위해 처리 FragmentNavigation 할 수 있습니다. FragmentNavigation 는 다음을 FragmentNavigationEventArgs 포함하여 이 용도에 유용한 속성을 노출하는 매개 변수를 전달합니다.
이 탐색 서비스를 소유하는 탐색기(NavigationWindow, Frame)입니다.
조각 이름입니다.
FragmentNavigation 처리하여 기본 WPF 조각 구현을 사용자 지정 구현으로 재정의할 수 있습니다. 이 경우 Handled를 true;로 설정해야 합니다. 그렇지 않으면 기본 WPF 조각 처리 동작이 적용됩니다.
이벤트 처리기 내에서 탐색을 FragmentNavigation 직접 시작하지 않아야 합니다. FragmentNavigation 기존 탐색 중에 발생하므로 이벤트 처리기에서 새 탐색을 FragmentNavigation 시작하면 throw될 수 있는 중첩된 탐색이 ExecutionEngineException 만들어집니다. 대신 을 사용하여 비동기 작업 항목을 만들어 간접적으로 탐색을 Dispatcher시작할 수 있습니다.
메모
NavigationService 발생하면 FragmentNavigation개체에 대한 Application.FragmentNavigation 이벤트도 발생합니다Application.
Important
조각 탐색은 다음 경우에 느슨한 XAML 페이지(루트 요소로 태그 전용 XAML 파일 Page )에 대해 지원되지 않습니다.
- 느슨한 XAML 페이지의 조각으로 이동하는 경우>
- 느슨한 XAML 페이지에서 다른 느슨한 XAML 페이지의 조각으로 이동하는 경우
그러나 느슨한 XAML 페이지는 자체 조각으로 이동할 수 있습니다.