다음을 통해 공유


NavigationService.FragmentNavigation 이벤트

정의

콘텐츠 조각에 대한 탐색이 시작될 때 발생합니다. 이는 원하는 조각이 현재 콘텐츠에 있거나 원본 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 유용한 속성은이 목적을 위해 노출 하는 매개 변수 포함:

처리할 수 있습니다 FragmentNavigation 사용자 고유의 사용자 지정 구현으로 기본 WPF 조각 구현을 재정의 하 합니다. 이렇게 하면 경우 설정 해야 합니다 Handledtrue고, 그렇지 않으면 기본 WPF 조각 처리 동작이 적용 됩니다.

직접 내에서 탐색을 시작 하면이 안 된 FragmentNavigation 이벤트 처리기입니다. 하므로 FragmentNavigation 에서 새 탐색을 시작 하는 기존 탐색을 하는 동안 발생을 FragmentNavigation 이벤트 처리기가 발생 시킬 수 있는 중첩 된 탐색은 ExecutionEngineException throw 됩니다. 대신 있습니다 간접적으로 시작할 수 탐색 항목으로 사용 하 여 비동기 작업을 만들어 여 Dispatcher입니다.

참고

NavigationService 발생 FragmentNavigation, 발생 Application.FragmentNavigation 이벤트에는 Application 개체입니다.

중요

조각 탐색은 다음 경우에 느슨한 XAML 페이지(태그 전용 XAML 파일 및 Page 를 루트 요소로 사용)에 대해 지원되지 않습니다.

• 느슨한 XAML 페이지의 조각으로 이동할 때

• 느슨한 XAML 페이지에서 다른 느슨한 XAML 페이지의 조각으로 이동할 때

그러나 XAML 사용 완화 페이지에서 자체 조각을 탐색할 수 있습니다.

적용 대상

추가 정보