NavigationService.FragmentNavigation Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Nastane při zahájení navigace k fragmentu obsahu, která nastane okamžitě, pokud je požadovaný fragment v aktuálním obsahu nebo po načtení zdrojového obsahu XAML, pokud je požadovaný fragment v jiném obsahu.
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
Event Type
Příklady
Následující příklad ukazuje, jak zajistit FragmentNavigation vlastní chování při navigaci při fragmentech. V tomto případě příklad otevře chybovou stránku XAML, pokud fragment na zdrojové stránce XAML není nalezen.
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
Poznámky
Ve výchozím nastavení je fragmentem obsahu obsah, který je obsažen pojmenovaným UIElementobjektem , což je UIElement atribut, jehož Name atribut je nastavený, např.:
<TextBlock Name="FragmentName">...</TextBlock>
K fragmentu XAML přejdete zadáním identifikátoru URI s příponou v následujícím formátu:
# Název fragmentu
Následuje příklad identifikátoru URI, který odkazuje na fragment obsahu:
http://www.microsoft.com/targetpage.xaml#FragmentName
Po načtení zdrojové stránky (po LoadCompleted vyvolání události) se spustí navigace ve fragmentu a NavigationService pokusí se najít fragment XAML. Pokud je fragment XAML nalezen, NavigationService dá pokyn navigátoru obsahu (NavigationWindow, Frame) k zobrazení fragmentu. Pokud potřebujete toto chování změnit, můžete si FragmentNavigation zajistit vlastní chování při navigaci na fragmenty. FragmentNavigation je předán FragmentNavigationEventArgs parametr, který zveřejňuje vlastnosti, které jsou pro tento účel užitečné, včetně:
Navigátor, který vlastní tuto navigační službu (NavigationWindow, Frame).
Název fragmentu.
Výchozí implementaci fragmentu WPF můžete přepsat FragmentNavigation vlastní implementací. Pokud to uděláte, musíte nastavit Handled na true
; jinak se použije výchozí chování zpracování fragmentů WPF.
Měli byste se vyhnout přímému inicializování navigace z obslužné FragmentNavigation rutiny události. Vzhledem k tomu FragmentNavigation , že je vyvolána během existující navigace, zahájení nové navigace z obslužné FragmentNavigation rutiny události vytvoří vnořenou navigaci, která může způsobit ExecutionEngineException vyvolání. Místo toho můžete nepřímo zahájit navigaci vytvořením asynchronní pracovní položky pomocí Dispatchernástroje .
Poznámka
Při NavigationService vyvolání FragmentNavigationtaké vyvolá Application.FragmentNavigation událost na objektu Application .
Důležité
Navigace v fragmentech se nepodporuje u volných stránek XAML (soubory XAML pouze s kódy, Page
které mají jako kořenový element) v následujících případech:
• Při přechodu na fragment ve volné stránce XAML.
• Při přechodu z volné stránky XAML na fragment v jiné volné stránce XAML.
Volná stránka XAML však může přejít na vlastní fragmenty.