NavigationService.FragmentNavigation Événement

Définition

Se produit lorsque la navigation vers un fragment de contenu commence, ce qui se produit immédiatement, si le fragment souhaité se trouve dans le contenu actuel ou après le chargement du contenu XAML source, si le fragment souhaité se trouve dans un contenu différent.

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 

Type d'événement

Exemples

L’exemple suivant montre comment gérer FragmentNavigation pour fournir un comportement de navigation de fragment personnalisé. Dans ce cas, l’exemple ouvre une page XAML d’erreur si le fragment de la page XAML source est introuvable.

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

Remarques

Par défaut, un fragment de contenu est un contenu contenu contenu par un nommé UIElement, qui est un dont l’attribut UIElementName est défini, par exemple :

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

Vous accédez à un fragment XAML en fournissant un URI avec un suffixe au format suivant :

# FragmentName

Voici un exemple d’URI qui fait référence à un fragment de contenu :

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

Une fois la page source chargée (une fois LoadCompleted l’événement déclenché), la navigation des fragments commence et les NavigationService tentatives de localisation du fragment XAML sont effectuées. Si le fragment XAML est trouvé, NavigationService indique au navigateur de contenu (NavigationWindow, Frame) d’afficher le fragment. Si vous devez modifier ce comportement, vous pouvez gérer FragmentNavigation pour fournir votre propre comportement de navigation des fragments. FragmentNavigation reçoit un FragmentNavigationEventArgs paramètre qui expose des propriétés utiles à cet effet, notamment :

Vous pouvez gérer FragmentNavigation pour remplacer l’implémentation de fragment WPF par défaut par votre propre implémentation personnalisée. Dans ce cas, vous devez définir Handledtruesur ; sinon, le comportement de traitement des fragments WPF par défaut est appliqué.

Vous devez éviter d’initier directement la navigation à partir d’un gestionnaire d’événements FragmentNavigation . Étant FragmentNavigation donné que est déclenché pendant une navigation existante, le lancement d’une nouvelle navigation à partir d’un FragmentNavigation gestionnaire d’événements crée une navigation imbriquée qui peut entraîner la ExecutionEngineException levée de. Au lieu de cela, vous pouvez lancer indirectement la navigation en créant un élément de travail asynchrone à l’aide de Dispatcher.

Notes

Lorsque NavigationService l’événement déclenche FragmentNavigation, il déclenche Application.FragmentNavigation également un événement sur l’objet Application .

Important

La navigation par fragment n’est pas prise en charge pour les pages XAML lâches (fichiers XAML de balisage uniquement avec Page comme élément racine) dans les cas suivants :

• Lors de la navigation vers un fragment dans une page XAML libre.

• Lors de la navigation d’une page XAML libre vers un fragment dans une autre page XAML libre.

Toutefois, une page XAML libre peut accéder à ses propres fragments.

S’applique à

Voir aussi