NavigationService.FragmentNavigation Händelse
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Inträffar när navigeringen till ett innehållsfragment börjar, vilket sker omedelbart, om det önskade fragmentet finns i det aktuella innehållet eller efter att käll-XAML-innehållet har lästs in, om det önskade fragmentet finns i ett annat innehåll.
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
Händelsetyp
Exempel
I följande exempel visas hur du hanterar FragmentNavigation för att tillhandahålla anpassat fragmentnavigeringsbeteende. I det här fallet öppnar exemplet ett XAML-fel om fragmentet på XAML-källsidan inte hittas.
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
Kommentarer
Som standard är ett innehållsfragment innehåll som ingår i ett namngivet UIElement, som är ett UIElement vars attribut har angetts Name . Ett exempel:
<TextBlock Name="FragmentName">...</TextBlock>
Du navigerar till ett XAML-fragment genom att tillhandahålla en URI med ett suffix i följande format:
# FragmentName
Följande visar ett exempel på en URI som refererar till ett innehållsfragment:
http://www.microsoft.com/targetpage.xaml#FragmentName
När källsidan har lästs in (efter LoadCompleted att händelsen har tagits upp) börjar fragmentnavigering och försöken NavigationService att hitta XAML-fragmentet. Om XAML-fragmentet hittas NavigationService instruerar du innehållsnavigatorn (NavigationWindow, Frame) att visa fragmentet. Om du behöver ändra det här beteendet kan du hantera FragmentNavigation för att tillhandahålla ditt eget beteende för fragmentnavigering. FragmentNavigation skickas en FragmentNavigationEventArgs parameter som exponerar egenskaper som är användbara för detta ändamål, inklusive:
Navigatören som äger den här navigeringstjänsten (NavigationWindow, Frame).
Fragmentnamnet.
Du kan hantera FragmentNavigation för att åsidosätta standardimplementeringen WPF fragment med din egen anpassade implementering. Om du gör det måste du ange Handled till true; Annars tillämpas standardbeteendet för WPF fragmentbearbetning.
Du bör undvika att direkt initiera navigering inifrån en FragmentNavigation händelsehanterare. Eftersom FragmentNavigation utlöses under en befintlig navigering skapas en kapslad navigering som kan orsaka FragmentNavigation att en ny navigering initieras från en ExecutionEngineException händelsehanterare. I stället kan du indirekt initiera navigeringen genom att skapa ett asynkront arbetsobjekt med hjälp av Dispatcher.
Note
När NavigationService höjningar genereras FragmentNavigationApplication.FragmentNavigation även händelsen för Application objektet.
Important
Fragmentnavigering stöds inte för lösa XAML-sidor (endast XAML-filer med Page som rotelement) i följande fall:
- När du navigerar till ett fragment på en lös XAML-sida.>
- När du navigerar från en lös XAML-sida till ett fragment på en annan lös XAML-sida.
En lös XAML-sida kan dock navigera till sina egna fragment.