NavigationService.FragmentNavigation Ereignis

Definition

Tritt auf, wenn die Navigation zu einem Inhalts Fragment beginnt, das sofort erfolgt, wenn sich das gewünschte Fragment im aktuellen Inhalt befindet oder nachdem der Quell-XAML-Inhalt geladen wurde,, wenn sich das gewünschte Fragment in einem anderen Inhalt befindet.Occurs when navigation to a content fragment begins, which occurs immediately, if the desired fragment is in the current content, or after the source XAML content has been loaded, if the desired fragment is in different content.

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

FragmentNavigationEventHandler

Beispiele

Das folgende Beispiel zeigt, wie FragmentNavigation Sie behandeln, um benutzerdefiniertes fragmentnavigationverhalten bereitzustellenThe following example shows how to handle FragmentNavigation to provide custom fragment navigation behavior. In diesem Fall wird im Beispiel eine XAML-Fehlerseite geöffnet, wenn das Fragment auf der Quell-XAML-Seite nicht gefunden wurde.In this case, the example opens an error XAML page if the fragment in the source XAML page is not found.

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 Inhalts Fragment um Inhalt, der in einem mit dem Namen enthalten ist UIElement , UIElement dessen- Name Attribut festgelegt ist, z. b.:By default, a content fragment is content that is contained by a named UIElement, which is a UIElement whose Name attribute is set, eg:

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

Sie navigieren zu einem XAML-Fragment, indem Sie einen URI mit einem Suffix im folgenden Format angeben:You navigate to a XAML fragment by providing a URI with a suffix in the following format:

#Fragmentname#FragmentName

Der folgende Code zeigt ein Beispiel für einen URI, der auf ein Inhalts Fragment verweist:The following shows an example of a URI that refers to a content fragment:

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

Nachdem die Quellseite geladen wurde (nachdem das LoadCompleted Ereignis ausgelöst wurde), beginnt die Fragmentnavigation und NavigationService versucht, das XAML-Fragment zu suchen.After the source page loads (after LoadCompleted event is raised), fragment navigation begins and the NavigationService attempts to locate the XAML fragment. Wenn das XAML-Fragment gefunden wird, NavigationService weist den Inhalts Navigator ( NavigationWindow , Frame ) an, das Fragment anzuzeigen.If the XAML fragment is found, NavigationService instructs the content navigator (NavigationWindow, Frame) to show the fragment. Wenn Sie dieses Verhalten ändern müssen, können Sie behandeln, FragmentNavigation um ein eigenes fragmentnavigationverhalten bereitzustellen.If you need to change this behavior, you can handle FragmentNavigation to provide your own fragment navigation behavior. FragmentNavigation wird ein Parameter übergeben, FragmentNavigationEventArgs der Eigenschaften verfügbar macht, die für diesen Zweck nützlich sind, einschließlich:FragmentNavigation is passed a FragmentNavigationEventArgs parameter which exposes properties that are useful for this purpose, including:

Sie können behandeln FragmentNavigation , um die standardmäßige WPF-fragmentimplementierung mit ihrer eigenen benutzerdefinierten Implementierung zu überschreiben.You can handle FragmentNavigation to override the default WPF fragment implementation with your own custom implementation. Wenn Sie dies tun, müssen Sie auf festlegen Handled true . andernfalls wird das Standardverhalten für die WPF-fragmentverarbeitung angewendet.If you do so, you need to set Handled to true; otherwise, the default WPF fragment processing behavior is applied.

Vermeiden Sie das direkte Initiieren der Navigation in einem- FragmentNavigation Ereignishandler.You should avoid directly initiating navigation from within a FragmentNavigation event handler. Da FragmentNavigation während einer vorhandenen Navigation ausgelöst wird, wird durch das Initiieren einer neuen Navigation von einem- FragmentNavigation Ereignishandler eine geschaltete Navigation erstellt, die bewirken kann, dass die ausgelöst ExecutionEngineException wird.Since FragmentNavigation is raised during an existing navigation, initiating a new navigation from a FragmentNavigation event handler creates a nested navigation that can cause the ExecutionEngineException to be thrown. Stattdessen können Sie die Navigation indirekt initiieren, indem Sie mithilfe von ein asynchrones Arbeits Element erstellen Dispatcher .Instead, you can indirectly initiate navigation by creating an asynchronous work item using the Dispatcher.

Hinweis

Wenn NavigationService ausgelöst FragmentNavigation wird, löst es auch ein- Application.FragmentNavigation Ereignis für das- Application Objekt aus.When NavigationService raises FragmentNavigation, it also raises Application.FragmentNavigation event on the Application object.

Wichtig

Die Fragmentnavigation wird für lose XAML-Seiten (nur-Markup-XAML-Dateien mit Page als Stamm Element) in den folgenden Fällen nicht unterstützt:Fragment navigation is not supported for loose XAML pages (markup-only XAML files with Page as the root element) in the following cases:

• Beim Navigieren zu einem Fragment auf einer losen XAML-Seite.• When navigating to a fragment in a loose XAML page.

• Beim Navigieren von einer Loose XAML-Seite zu einem Fragment in einer anderen losen XAML-Seite.• When navigating from a loose XAML page to a fragment in another loose XAML page.

Eine lose XAML-Seite kann jedoch zu ihren eigenen Fragmenten navigieren.However, a loose XAML page can navigate to its own fragments.

Gilt für:

Siehe auch