Partilhar via


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 que o conteúdo XAML de origem tiver 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 a seguir mostra como manipular FragmentNavigation para fornecer o comportamento de navegação de fragmento personalizado. Nesse caso, o exemplo abrirá 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

Comentários

Por padrão, um fragmento de conteúdo é um conteúdo contido por um chamado UIElement, que é um UIElement cujo Name atributo está definido, por exemplo:

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

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

# FragmentName

Veja a seguir um exemplo de um URI que se refere a um fragmento de conteúdo:

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

Depois que a página de origem é carregada (depois LoadCompleted que o evento é acionado), a navegação do fragmento começa e as NavigationService tentativas de localizar o fragmento XAML. Se o fragmento XAML for encontrado, NavigationService instruirá o navegador de conteúdo (NavigationWindow, Frame) a mostrar o fragmento. Se você precisar alterar esse comportamento, poderá manipular FragmentNavigation para fornecer seu próprio comportamento de navegação de fragmento. FragmentNavigation é passado um FragmentNavigationEventArgs parâmetro que expõe propriedades que são úteis para essa finalidade, incluindo:

Você pode manipular FragmentNavigation para substituir a implementação de fragmento do WPF padrão com sua própria implementação personalizada. Se você fizer isso, precisará definir Handledtruecomo ; caso contrário, o comportamento de processamento de fragmento do WPF padrão será aplicado.

Você deve evitar iniciar diretamente a navegação de dentro de um FragmentNavigation manipulador de eventos. Como FragmentNavigation é gerado durante uma navegação existente, iniciar uma nova navegação de um FragmentNavigation manipulador de eventos cria uma navegação aninhada que pode fazer com que o ExecutionEngineException seja gerado. Em vez disso, você pode iniciar indiretamente a navegação criando um item de trabalho assíncrono usando o Dispatcher.

Observação

Quando NavigationService gera FragmentNavigation, ele também aciona Application.FragmentNavigation o evento no Application objeto .

Importante

A navegação por fragmentos não tem suporte para páginas XAML soltas (arquivos XAML somente de marcação com Page como o elemento raiz) nos seguintes casos:

• Ao navegar até um fragmento em uma página XAML solta.

• Ao navegar de uma página XAML solta para um fragmento em outra página XAML solta.

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

Aplica-se a

Confira também