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 após 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 a seguir mostra como lidar 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 é o conteúdo contido por um nomeado UIElement, que é um UIElement atributo 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

O seguinte mostra 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á lidar 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 lidar com FragmentNavigation para substituir a implementação de fragmento de WPF padrão com sua própria implementação personalizada. Se você fizer isso, precisará definir Handled como true; caso contrário, o comportamento padrão de processamento de fragmentos WPF é 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 ela ExecutionEngineException seja gerada. Em vez disso, você pode iniciar indiretamente a navegação criando um item de trabalho assíncrono usando o Dispatcher.

Note

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

Importante

Não há suporte para navegação de fragmento para páginas XAML soltas (arquivos XAML somente marcação com Page 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