NavigationService.FragmentNavigation Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Występuje po rozpoczęciu nawigacji do fragmentu zawartości, który występuje natychmiast, jeśli żądany fragment znajduje się w bieżącej zawartości lub po załadowaniu źródłowej zawartości XAML, jeśli żądany fragment znajduje się w innej zawartości.
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
Typ zdarzenia
Przykłady
W poniższym przykładzie pokazano, jak obsługiwać FragmentNavigation sposób zapewniania niestandardowego zachowania nawigacji fragmentów. W tym przypadku przykład otwiera stronę błędu XAML, jeśli fragment na źródłowej stronie XAML nie zostanie znaleziony.
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
Uwagi
Domyślnie fragment zawartości jest zawartością zawartą w nazwie UIElement, która jest ustawiona UIElementName , np. :
<TextBlock Name="FragmentName">...</TextBlock>
Przejdź do fragmentu XAML, podając identyfikator URI z sufiksem w następującym formacie:
# FragmentName
Poniżej przedstawiono przykład identyfikatora URI, który odwołuje się do fragmentu zawartości:
http://www.microsoft.com/targetpage.xaml#FragmentName
Po załadowaniu strony źródłowej (po LoadCompleted wystąpieniu zdarzenia) rozpoczyna się nawigacja fragmentu i NavigationService próby zlokalizowania fragmentu XAML. Jeśli fragment XAML zostanie znaleziony, NavigationService poinstruuje nawigator zawartości (NavigationWindow, Frame) w celu wyświetlenia fragmentu. Jeśli musisz zmienić to zachowanie, możesz obsłużyć FragmentNavigation obsługę w celu zapewnienia własnego zachowania nawigacji fragmentu. FragmentNavigation jest przekazywany FragmentNavigationEventArgs parametr, który uwidacznia właściwości, które są przydatne w tym celu, w tym:
Nawigator, który jest właścicielem tej usługi nawigacji (NavigationWindow, Frame).
Nazwa fragmentu.
Możesz obsługiwać FragmentNavigation zastępowanie domyślnej implementacji fragmentu WPF przy użyciu własnej implementacji niestandardowej. Jeśli to zrobisz, musisz ustawić wartość Handledtrue
; w przeciwnym razie zostanie zastosowane domyślne zachowanie przetwarzania fragmentów WPF.
Należy unikać bezpośredniego inicjowania nawigacji z poziomu programu obsługi zdarzeń FragmentNavigation . Ponieważ FragmentNavigation jest wywoływana podczas istniejącej nawigacji, inicjowanie nowej nawigacji z FragmentNavigation programu obsługi zdarzeń tworzy zagnieżdżoną nawigację, która może spowodować ExecutionEngineException zgłoszenie. Zamiast tego możesz pośrednio zainicjować nawigację, tworząc asynchroniczny element roboczy przy użyciu elementu Dispatcher.
Uwaga
W przypadku NavigationService wywołania FragmentNavigationobiektu program zgłasza Application.FragmentNavigation również zdarzenie Application .
Ważne
Nawigacja po fragmentach nie jest obsługiwana w przypadku luźnych stron XAML (pliki XAML tylko znaczniki z Page
elementem głównym) w następujących przypadkach:
• Podczas przechodzenia do fragmentu na luźnej stronie XAML.
• Podczas przechodzenia z luźnej strony XAML do fragmentu na innej luźnej stronie XAML.
Jednak luźna strona XAML może przejść do własnych fragmentów.