NavigationService.FragmentNavigation Evento

Definición

Se produce cuando se inicia la navegación a un fragmento de contenido, que se produce inmediatamente, si el fragmento deseado está en el contenido actual o después de cargar el contenido XAML de origen, si el fragmento deseado está en contenido diferente.

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 

Tipo de evento

Ejemplos

En el ejemplo siguiente se muestra cómo controlar FragmentNavigation para proporcionar un comportamiento de navegación por fragmentos personalizado. En este caso, el ejemplo abre una página XAML de error si no se encuentra el fragmento de la página XAML de origen.

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

Comentarios

De forma predeterminada, un fragmento de contenido es el contenido que contiene un elemento denominado UIElement, que es un UIElement cuyo Name atributo se establece, por ejemplo:

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

Para navegar a un fragmento XAML, proporcione un URI con un sufijo en el formato siguiente:

#FragmentName

A continuación se muestra un ejemplo de un URI que hace referencia a un fragmento de contenido:

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

Una vez que se cargue la página de origen (después LoadCompleted de que se genere el evento), comienza la navegación por fragmentos y los NavigationService intentos de localizar el fragmento XAML. Si se encuentra el fragmento XAML, NavigationService indica al navegador de contenido (NavigationWindow, Frame) que muestre el fragmento. Si necesita cambiar este comportamiento, puede controlar FragmentNavigation para proporcionar su propio comportamiento de navegación por fragmentos. FragmentNavigation se pasa un FragmentNavigationEventArgs parámetro que expone las propiedades que son útiles para este propósito, entre los que se incluyen:

Puede controlar FragmentNavigation para invalidar la implementación de fragmentos de WPF predeterminada con su propia implementación personalizada. Si lo hace, debe establecer Handledtrueen ; de lo contrario, se aplica el comportamiento de procesamiento de fragmentos de WPF predeterminado.

Debe evitar iniciar directamente la navegación desde un FragmentNavigation controlador de eventos. Puesto FragmentNavigation que se genera durante una navegación existente, al iniciar una nueva navegación desde un FragmentNavigation controlador de eventos se crea una navegación anidada que puede provocar que ExecutionEngineException se produzca . En su lugar, puede iniciar la navegación indirectamente mediante la creación de un elemento de trabajo asincrónico mediante .Dispatcher

Nota:

Cuando NavigationService genera FragmentNavigation, también genera Application.FragmentNavigation un evento en el Application objeto .

Importante

La navegación por fragmentos no se admite para páginas XAML sueltas (archivos XAML de solo marcado con Page como elemento raíz) en los casos siguientes:

• Al navegar a un fragmento en una página XAML flexible.

• Al navegar desde una página XAML flexible a un fragmento de otra página XAML flexible.

Sin embargo, una página XAML dinámica puede navegar a sus propios fragmentos.

Se aplica a

Consulte también