Share via


NavigationService.FragmentNavigation Olay

Tanım

İstenen parça geçerli içerikteyse veya istenen parça farklı içerikteyse kaynak XAML içeriği yüklendikten sonra bir içerik parçasına gezinti başladığında gerçekleşir.

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 

Olay Türü

Örnekler

Aşağıdaki örnek, özel parça gezinti davranışı sağlama işleminin nasıl yapılacağını FragmentNavigation gösterir. Bu durumda örnek, kaynak XAML sayfasındaki parça bulunamazsa bir hata XAML sayfası açar.

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

Açıklamalar

Varsayılan olarak, içerik parçası, özniteliği ayarlanmış olan adlandırılmış UIElementöğesinin UIElementName içerdiği içeriktir, örneğin:

<TextBlock Name="FragmentName">...</TextBlock>

Aşağıdaki biçimde bir son ek içeren bir URI sağlayarak bir XAML parçasına gidersiniz:

#FragmentName

Aşağıda bir içerik parçasına başvuran bir URI örneği gösterilmektedir:

http://www.microsoft.com/targetpage.xaml#FragmentName

Kaynak sayfa yüklendikten sonra (olay harekete geçirildikten sonra LoadCompleted ), parça gezintisi başlar ve NavigationService XAML parçasını bulmaya çalışır. XAML parçası bulunursa, NavigationService içerik gezginine (NavigationWindow, Frame) parçanın gösterilmesini ister. Bu davranışı değiştirmeniz gerekiyorsa, kendi parça gezinti davranışınızı sağlamak için işleyebilirsiniz FragmentNavigation . FragmentNavigation , aşağıdakiler dahil olmak üzere bu amaç için yararlı olan özellikleri kullanıma sunan bir FragmentNavigationEventArgs parametre geçirilir:

Varsayılan WPF parçası uygulamasını kendi özel uygulamanızla geçersiz kılmak için işleyebilirsiniz FragmentNavigation . Bunu yaparsanız olarak ayarlamanız Handledtruegerekir; aksi takdirde, varsayılan WPF parça işleme davranışı uygulanır.

Bir olay işleyicisi içinden FragmentNavigation gezintiyi doğrudan başlatmaktan kaçınmanız gerekir. FragmentNavigation Mevcut bir gezinti sırasında tetiklendiğinden, bir olay işleyicisinden FragmentNavigation yeni bir gezinti başlatılması, iç içe yerleştirilmiş bir gezinti oluşturur ve bu da oluşturulabilmesine neden ExecutionEngineException olabilir. Bunun yerine, kullanarak Dispatcherzaman uyumsuz bir iş öğesi oluşturarak dolaylı olarak gezinti başlatabilirsiniz.

Not

yükselttiğinde NavigationServiceFragmentNavigation, nesnesi üzerinde Application de olay oluştururApplication.FragmentNavigation.

Önemli

Parça gezintisi, aşağıdaki durumlarda gevşek XAML sayfalarında (kök öğe olarak yalnızca işaretleme XAML dosyaları Page ) desteklenmez:

• Gevşek bir XAML sayfasındaki bir parçaya gezinirken.

• Gevşek bir XAML sayfasından başka bir gevşek XAML sayfasındaki bir parçaya gezinirken.

Ancak, gevşek bir XAML sayfası kendi parçalarına gidebilir.

Şunlara uygulanır

Ayrıca bkz.