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 포함하여 이 용도에 유용한 속성을 노출하는 매개 변수를 전달합니다.

  • 이 탐색 서비스를 소유하는 탐색기(NavigationWindow, Frame)입니다.

  • 조각 이름입니다.

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

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

메모

NavigationService 발생하면 FragmentNavigation개체에 대한 Application.FragmentNavigation 이벤트도 발생합니다Application.

Important

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

  • 느슨한 XAML 페이지의 조각으로 이동하는 경우>
  • 느슨한 XAML 페이지에서 다른 느슨한 XAML 페이지의 조각으로 이동하는 경우

그러나 느슨한 XAML 페이지는 자체 조각으로 이동할 수 있습니다.

적용 대상

추가 정보