Sdílet prostřednictvím


NavigationService.FragmentNavigation Událost

Definice

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ě:

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.

Platí pro

Viz také