NavigationService.FragmentNavigation Událost

Definice

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

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.

Platí pro

Viz také