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, das sofort auftritt, 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
Das folgende Beispiel zeigt, wie Sie das Verhalten der benutzerdefinierten Fragmentnavigation behandeln FragmentNavigation . In diesem Fall öffnet das Beispiel eine XAML-Fehlerseite, 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 handelt es sich bei einem Inhaltsfragment um Inhalte, die durch einen benannten UIElementInhalt enthalten sind, bei dem es sich um ein UIElement Attribut handelt, das Name festgelegt ist. Beispiel:
<TextBlock Name="FragmentName">...</TextBlock>
Sie navigieren zu einem XAML-Fragment, indem Sie einen URI mit einem Suffix im folgenden Format bereitstellen:
# FragmentName
Im Folgenden sehen Sie ein Beispiel für einen URI, der auf ein Inhaltsfragment verweist:
http://www.microsoft.com/targetpage.xaml#FragmentName
Nachdem die Quellseite geladen wurde (nach LoadCompleted dem Auslösen des Ereignisses), beginnt die Fragmentnavigation und die NavigationService Versuche, das XAML-Fragment zu finden. Wenn das XAML-Fragment gefunden wird, NavigationService wird der Inhaltsnavigator (NavigationWindow, ) angewiesen, 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 Fragmentname.
Sie können FragmentNavigation behandeln, um die standardmäßige WPF Fragmentimplementierung mit Ihrer eigenen benutzerdefinierten Implementierung außer Kraft zu setzen. Wenn Sie dies tun, müssen Sie Handled auf true festlegen; andernfalls wird das Standardverhalten WPF Fragmentverarbeitung angewendet.
Sie sollten verhindern, dass die Navigation direkt innerhalb eines FragmentNavigation Ereignishandlers initiiert wird. Da FragmentNavigation während einer vorhandenen Navigation ausgelöst wird, erstellt das Initiieren einer neuen Navigation aus einem FragmentNavigation Ereignishandler eine geschachtelte Navigation, die dazu führen kann, dass der ExecutionEngineException Vorgang ausgelöst wird. Stattdessen können Sie die Navigation indirekt initiieren, indem Sie eine asynchrone Arbeitsaufgabe mithilfe der Dispatcher.
Note
Wenn NavigationService das Objekt ausgelöst wirdFragmentNavigation, löst es auch ein Ereignis für das Application.FragmentNavigation Objekt ausApplication.
Important
Die Fragmentnavigation wird für lose XAML-Seiten (markupgeschützte XAML-Dateien mit Page dem Stammelement) in den folgenden Fällen nicht unterstützt:
- Beim Navigieren zu einem Fragment auf einer losen XAML-Seite.>
- Wenn Sie von einer losen XAML-Seite zu einem Fragment auf einer anderen losen XAML-Seite navigieren.
Eine lose XAML-Seite kann jedoch zu eigenen Fragmenten navigieren.