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 na fragment obsahu, ke kterému dojde 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 zpracovat FragmentNavigation chování vlastní navigace fragmentů. V tomto případě příklad otevře chybovou stránku XAML, pokud fragment na zdrojové stránce XAML nebyl 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 fragment obsahu obsah, který je obsažen v pojmenovaném UIElement, což je jehož UIElementName atribut je nastaven. Příklad:
<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:
# FragmentName
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 zahájí navigace fragmentu a NavigationService pokusy o vyhledání fragmentu XAML. Pokud se najde fragment XAML, NavigationService dá navigátor obsahu (NavigationWindow, ) pokyn, Frameaby zobrazil fragment. Pokud potřebujete toto chování změnit, můžete použít FragmentNavigation vlastní chování navigace fragmentů. FragmentNavigation je předán FragmentNavigationEventArgs parametr, který zveřejňuje vlastnosti, které jsou užitečné pro tento účel, včetně:
Navigátor, který vlastní tuto navigační službu (NavigationWindow, Frame).
Název fragmentu.
Pomocí FragmentNavigation můžete přepsat výchozí implementaci fragmentu WPF (Windows Presentation Foundation) vlastní implementací. Pokud to uděláte, musíte nastavit Handled na true; jinak se použije výchozí WPF (Windows Presentation Foundation) chování zpracování fragmentů.
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, iniciace nové navigace z FragmentNavigation obslužné rutiny události vytvoří vnořenou navigaci, která může způsobit ExecutionEngineException vyvolání. Místo toho můžete nepřímo inicializovat navigaci vytvořením asynchronní pracovní položky pomocí .Dispatcher
Note
Při NavigationService vyvolání FragmentNavigationvyvolá také Application.FragmentNavigation událost objektu Application .
Important
Navigace fragmentem není podporována pro volné stránky XAML (soubory XAML pouze s kódem s kořenovým elementem Page ) v následujících případech:
- Při přechodu na fragment na volné stránce XAML.>
- Při přechodu z volné stránky XAML na fragment v jiné volné stránce XAML.
Uvolněná stránka XAML ale může přejít na vlastní fragmenty.