NavigationService.FragmentNavigation Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt auf, wenn die Navigation zu einem Inhaltsfragment beginnt, was sofort erfolgt, wenn sich das gewünschte Fragment im aktuellen Inhalt befindet, oder nachdem der XAML-Quellinhalt geladen wurde, wenn sich das gewünschte Fragment in einem anderen Inhalt befindet.
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
Ereignistyp
Beispiele
Im folgenden Beispiel wird gezeigt, wie die Verarbeitung zum Bereitstellen eines benutzerdefinierten Fragmentnavigationsverhaltens erfolgt FragmentNavigation . In diesem Fall wird im Beispiel eine FEHLER-XAML-Seite geöffnet, wenn das Fragment auf der XAML-Quellseite nicht gefunden wird.
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
Hinweise
Standardmäßig ist ein Inhaltsfragment Inhalt, der in einem namens UIElemententhalten ist, bei dem es sich um ein UIElement festgelegtes Name Attribut handelt, z. B.:
<TextBlock Name="FragmentName">...</TextBlock>
Sie navigieren zu einem XAML-Fragment, indem Sie einen URI mit einem Suffix im folgenden Format angeben:
# FragmentName
Im Folgenden finden Sie ein Beispiel für einen URI, der auf ein Inhaltsfragment verweist:
http://www.microsoft.com/targetpage.xaml#FragmentName
Nachdem die Quellseite geladen wurde (nachdem LoadCompleted das Ereignis ausgelöst wurde), beginnt die Fragmentnavigation und die NavigationService Versuche, das XAML-Fragment zu finden. Wenn das XAML-Fragment gefunden wird, NavigationService weist den Inhaltsnavigator (NavigationWindow, ) an, Framedas Fragment anzuzeigen. Wenn Sie dieses Verhalten ändern müssen, können Sie ihr FragmentNavigation eigenes Fragmentnavigationsverhalten bereitstellen. FragmentNavigation wird ein FragmentNavigationEventArgs Parameter übergeben, der Eigenschaften verfügbar macht, die für diesen Zweck nützlich sind, einschließlich:
Der Navigator, der diesen Navigationsdienst besitzt (NavigationWindow, Frame).
Der Name des Fragments.
Sie können die Standardimplementierung von WPF-Fragmenten mit Ihrer eigenen benutzerdefinierten Implementierung außer Kraft setzen FragmentNavigation . Wenn Sie dies tun, müssen Sie auf true
festlegenHandled. Andernfalls wird das Standardmäßige WPF-Fragmentverarbeitungsverhalten angewendet.
Sie sollten vermeiden, dass die Navigation direkt in einem FragmentNavigation Ereignishandler initiiert wird. Da FragmentNavigation während einer vorhandenen Navigation ausgelöst wird, erstellt das Initiieren einer neuen Navigation über einen FragmentNavigation Ereignishandler eine geschachtelte Navigation, die dazu führen kann, dass ausgelöst ExecutionEngineException wird. Stattdessen können Sie die Navigation indirekt initiieren, indem Sie mithilfe von Dispatcherein asynchrones Arbeitselement erstellen.
Hinweis
Wenn NavigationService ausgelöst wirdFragmentNavigation, wird auch das -Ereignis für das Application -Objekt ausgelöstApplication.FragmentNavigation.
Wichtig
Die Fragmentnavigation wird für lose XAML-Seiten (nur Markup-XAML-Dateien mit Page
als Stammelement) in den folgenden Fällen nicht unterstützt:
• Beim Navigieren zu einem Fragment auf einer losen XAML-Seite.
• Beim Navigieren von einer losen XAML-Seite zu einem Fragment in einer anderen losen XAML-Seite.
Eine Loose XAML-Seite kann jedoch zu ihren eigenen Fragmenten navigieren.