NavigationService.FragmentNavigation Ereignis

Definition

Tritt auf, wenn die Navigation zu einem Inhaltsfragment beginnt, das sofort auftritt, 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

Das folgende Beispiel zeigt, wie Sie das Verhalten der benutzerdefinierten Fragmentnavigation behandeln FragmentNavigation . In diesem Fall öffnet das Beispiel eine XAML-Fehlerseite, 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 handelt es sich bei einem Inhaltsfragment um Inhalte, die durch einen benannten UIElementInhalt enthalten sind, bei dem es sich um ein UIElement Attribut handelt, das Name festgelegt ist. Beispiel:

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

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

# FragmentName

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

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

Nachdem die Quellseite geladen wurde (nach LoadCompleted dem Auslösen des Ereignisses), beginnt die Fragmentnavigation und die NavigationService Versuche, das XAML-Fragment zu finden. Wenn das XAML-Fragment gefunden wird, NavigationService wird der Inhaltsnavigator (NavigationWindow, ) angewiesen, 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 FragmentNavigation behandeln, um die standardmäßige WPF Fragmentimplementierung mit Ihrer eigenen benutzerdefinierten Implementierung außer Kraft zu setzen. Wenn Sie dies tun, müssen Sie Handled auf true festlegen; andernfalls wird das Standardverhalten WPF Fragmentverarbeitung angewendet.

Sie sollten verhindern, dass die Navigation direkt innerhalb eines FragmentNavigation Ereignishandlers initiiert wird. Da FragmentNavigation während einer vorhandenen Navigation ausgelöst wird, erstellt das Initiieren einer neuen Navigation aus einem FragmentNavigation Ereignishandler eine geschachtelte Navigation, die dazu führen kann, dass der ExecutionEngineException Vorgang ausgelöst wird. Stattdessen können Sie die Navigation indirekt initiieren, indem Sie eine asynchrone Arbeitsaufgabe mithilfe der Dispatcher.

Note

Wenn NavigationService das Objekt ausgelöst wirdFragmentNavigation, löst es auch ein Ereignis für das Application.FragmentNavigation Objekt ausApplication.

Important

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

  • Beim Navigieren zu einem Fragment auf einer losen XAML-Seite.>
  • Wenn Sie von einer losen XAML-Seite zu einem Fragment auf einer anderen losen XAML-Seite navigieren.

Eine lose XAML-Seite kann jedoch zu eigenen Fragmenten navigieren.

Gilt für:

Weitere Informationen