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 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:
O navegador que possui esse serviço de navegação (NavigationWindow, Frame).
O nome do fragmento.
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.