NavigationService.FragmentNavigation Evento
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
O navegador que possui esse serviço de navegação (NavigationWindow, Frame).
O nome do fragmento.
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 Handledtrue
como ; 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.