NavigationService.FragmentNavigation Evento

Definição

Ocorre quando a navegação para um fragmento de conteúdo começa, o que ocorre imediatamente, se o fragmento desejado estiver no conteúdo atual, ou depois de o conteúdo XAML de origem ter sido carregado, se o fragmento desejado estiver em conteúdo 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

Exemplos

O exemplo seguinte mostra como lidar FragmentNavigation com o comportamento personalizado de navegação de fragmentos. Neste caso, o exemplo abre uma página XAML de erro se o fragmento na página XAML de origem não for encontrado.

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

Observações

Por defeito, um fragmento de conteúdo é conteúdo contido por um nomeado UIElement, que é um UIElement cujo Name atributo está definido. Por exemplo:

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

Navega até um fragmento XAML fornecendo um URI com um sufixo no seguinte formato:

# FragmentName

Segue-se um exemplo de URI que se refere a um fragmento de conteúdo:

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

Depois de a página de origem carregar (após LoadCompleted o evento ser levantado), começa a navegação por fragmentos e começam as NavigationService tentativas de localizar o fragmento XAML. Se o fragmento XAML for encontrado, NavigationService instrui o navegador de conteúdo (NavigationWindow, Frame) a mostrar o fragmento. Se precisares de mudar este comportamento, podes tratar FragmentNavigation de fornecer o teu próprio comportamento de navegação de fragmentos. FragmentNavigation recebe um FragmentNavigationEventArgs parâmetro que expõe propriedades úteis para este propósito, incluindo:

Podes gerir FragmentNavigation para sobrescrever a implementação padrão do fragmento WPF com a tua própria implementação personalizada. Se o fizer, precisa de definir Handled para true; caso contrário, aplica-se o comportamento padrão de processamento de fragmentos WPF.

Deves evitar iniciar a navegação diretamente a partir de um FragmentNavigation gestor de eventos. Como FragmentNavigation é elevado durante uma navegação existente, iniciar uma nova navegação a partir de um FragmentNavigation gestor de eventos cria uma navegação aninhada que pode causar o lançamento do ExecutionEngineException . Em vez disso, pode iniciar a navegação indiretamente criando um item de trabalho assíncrono usando o Dispatcherarquivo .

Note

Quando NavigationService eleva FragmentNavigation, também eleva Application.FragmentNavigation o evento no Application objeto.

Importante

A navegação por fragmentos não é suportada para páginas XAML soltas (ficheiros XAML apenas de marcação com Page como elemento raiz) nos seguintes casos:

  • Ao navegar para um fragmento numa página XAML solta.>
  • Ao navegar de uma página XAML solta para um fragmento noutra página XAML solta.

No entanto, uma página XAML solta pode navegar até aos seus próprios fragmentos.

Aplica-se a

Ver também