Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Exporter (0) Imprimer
Développer tout

NavigationService.FragmentNavigation, événement

Mise à jour : novembre 2007

Se produit dès que la navigation à un fragment de contenu commence si le fragment désiré est dans le contenu actuel, ou bien après que le contenu XAML de la source a été chargé si le fragment désiré est dans un contenu différent.

Espace de noms :  System.Windows.Navigation
Assembly :  PresentationFramework (dans PresentationFramework.dll)

public event FragmentNavigationEventHandler FragmentNavigation
/** @event */
public void add_FragmentNavigation (FragmentNavigationEventHandler value)
/** @event */
public void remove_FragmentNavigation (FragmentNavigationEventHandler value)

JScript ne prend pas en charge les événements.
Vous ne pouvez pas utiliser cet événement en XAML.

Par défaut, un fragment de contenu correspond à du contenu inclus dans un UIElement nommé, correspondant à un UIElement dont l'attribut Name est défini, par exemple :

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

Vous devez naviguer jusqu'à un fragment XAML en fournissant un URI et un suffixe sous la forme suivante :

#FragmentName

Ce qui suit illustre l'exemple d'un URI faisant référence à un fragment de contenu :

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

Après le chargement de la page source (après que l'événement LoadCompleted a été déclenché), la navigation de fragment commence et le NavigationService essaie de localiser le fragment XAML. Si le fragment XAML est recherché, 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 de fragments. Un paramètre FragmentNavigationEventArgs qui expose des propriétés utiles, est passé à FragmentNavigation, notamment :

Vous pouvez gérer FragmentNavigation pour substituer l'implémentation de fragmentation du WPF par défaut par une implémentation personnalisée. Si c'est le cas, vous devez affecter à Handled la valeur true; sinon, le comportement de traitement de fragments WPF par défaut est appliqué.

Vous devez éviter d'initialiser directement la navigation à partir d'un gestionnaire d'événements FragmentNavigation. FragmentNavigation étant déclenché pendant une navigation existante, l'initialisation d'une nouvelle navigation à partir d'un gestionnaire d'événements FragmentNavigation crée une navigation imbriquée qui peut provoquer la levée d'une ExecutionEngineException. Vous pouvez dans ce cas initialiser indirectement la navigation en créant plutôt un élément de travail asynchrone à l'aide du Dispatcher. Pour retrouver une solution qui le démontre, consultez Navigation vers un fragment, exemple.

Remarque :

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

Remarque importante :

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

• lors de la navigation pour atteindre un fragment dans une page XAML libre ;

• lors de la navigation d'une page XAML libre à un fragment dans une autre page XAML libre.

Toutefois, une page XAML libre peut naviguer jusqu'à ses propres fragments.

L'exemple suivant indique comment gérer FragmentNavigation pour fournir le comportement de navigation de fragment personnalisé. Dans notre cas, l'exemple ouvre une page d'erreur XAML si le fragment dans la page source XAML 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;
    }
}


Windows Vista

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5, 3.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft