NavigationService.FragmentNavigation Evento
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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:
O navegador que possui este serviço de navegação (NavigationWindow, Frame).
O nome do fragmento.
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.