NavigationService.FragmentNavigation Ereignis

Definition

Tritt auf, wenn die Navigation zu einem Inhaltsfragment beginnt, was sofort erfolgt, wenn sich das gewünschte Fragment im aktuellen Inhalt befindet, oder nachdem der XAML-Quellinhalt geladen wurde, wenn sich das gewünschte Fragment in einem anderen Inhalt befindet.

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 

Ereignistyp

Beispiele

Im folgenden Beispiel wird gezeigt, wie die Verarbeitung zum Bereitstellen eines benutzerdefinierten Fragmentnavigationsverhaltens erfolgt FragmentNavigation . In diesem Fall wird im Beispiel eine FEHLER-XAML-Seite geöffnet, wenn das Fragment auf der XAML-Quellseite nicht gefunden wird.

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

Hinweise

Standardmäßig ist ein Inhaltsfragment Inhalt, der in einem namens UIElemententhalten ist, bei dem es sich um ein UIElement festgelegtes Name Attribut handelt, z. B.:

<TextBlock Name="FragmentName">...</TextBlock>

Sie navigieren zu einem XAML-Fragment, indem Sie einen URI mit einem Suffix im folgenden Format angeben:

#FragmentName

Im Folgenden finden Sie ein Beispiel für einen URI, der auf ein Inhaltsfragment verweist:

http://www.microsoft.com/targetpage.xaml#FragmentName

Nachdem die Quellseite geladen wurde (nachdem LoadCompleted das Ereignis ausgelöst wurde), beginnt die Fragmentnavigation und die NavigationService Versuche, das XAML-Fragment zu finden. Wenn das XAML-Fragment gefunden wird, NavigationService weist den Inhaltsnavigator (NavigationWindow, ) an, Framedas Fragment anzuzeigen. Wenn Sie dieses Verhalten ändern müssen, können Sie ihr FragmentNavigation eigenes Fragmentnavigationsverhalten bereitstellen. FragmentNavigation wird ein FragmentNavigationEventArgs Parameter übergeben, der Eigenschaften verfügbar macht, die für diesen Zweck nützlich sind, einschließlich:

Sie können die Standardimplementierung von WPF-Fragmenten mit Ihrer eigenen benutzerdefinierten Implementierung außer Kraft setzen FragmentNavigation . Wenn Sie dies tun, müssen Sie auf truefestlegenHandled. Andernfalls wird das Standardmäßige WPF-Fragmentverarbeitungsverhalten angewendet.

Sie sollten vermeiden, dass die Navigation direkt in einem FragmentNavigation Ereignishandler initiiert wird. Da FragmentNavigation während einer vorhandenen Navigation ausgelöst wird, erstellt das Initiieren einer neuen Navigation über einen FragmentNavigation Ereignishandler eine geschachtelte Navigation, die dazu führen kann, dass ausgelöst ExecutionEngineException wird. Stattdessen können Sie die Navigation indirekt initiieren, indem Sie mithilfe von Dispatcherein asynchrones Arbeitselement erstellen.

Hinweis

Wenn NavigationService ausgelöst wirdFragmentNavigation, wird auch das -Ereignis für das Application -Objekt ausgelöstApplication.FragmentNavigation.

Wichtig

Die Fragmentnavigation wird für lose XAML-Seiten (nur Markup-XAML-Dateien mit Page als Stammelement) in den folgenden Fällen nicht unterstützt:

• Beim Navigieren zu einem Fragment auf einer losen XAML-Seite.

• Beim Navigieren von einer losen XAML-Seite zu einem Fragment in einer anderen losen XAML-Seite.

Eine Loose XAML-Seite kann jedoch zu ihren eigenen Fragmenten navigieren.

Gilt für:

Weitere Informationen