Bagikan melalui


NavigationService.FragmentNavigation Kejadian

Definisi

Terjadi ketika navigasi ke fragmen konten dimulai, yang segera terjadi, jika fragmen yang diinginkan ada di konten saat ini, atau setelah konten XAML sumber dimuat, jika fragmen yang diinginkan berada dalam konten yang berbeda.

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 

Jenis Acara

Contoh

Contoh berikut menunjukkan cara menangani FragmentNavigation untuk menyediakan perilaku navigasi fragmen kustom. Dalam hal ini, contoh membuka halaman XAML kesalahan jika fragmen di halaman XAML sumber tidak ditemukan.

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

Keterangan

Secara default, fragmen konten adalah konten yang dimuat oleh bernama UIElement, yang merupakan UIElement atribut yang Name diatur, misalnya:

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

Anda menavigasi ke fragmen XAML dengan menyediakan URI dengan akhiran dalam format berikut:

# FragmentName

Berikut ini memperlihatkan contoh URI yang mengacu pada fragmen konten:

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

Setelah halaman sumber dimuat (setelah LoadCompleted peristiwa dinaikkan), navigasi fragmen dimulai dan NavigationService upaya untuk menemukan fragmen XAML. Jika fragmen XAML ditemukan, NavigationService menginstruksikan navigator konten (NavigationWindow, Frame) untuk menampilkan fragmen. Jika Anda perlu mengubah perilaku ini, Anda dapat menangani FragmentNavigation untuk menyediakan perilaku navigasi fragmen Anda sendiri. FragmentNavigation diteruskan parameter FragmentNavigationEventArgs yang mengekspos properti yang berguna untuk tujuan ini, termasuk:

Anda dapat menangani FragmentNavigation untuk mengambil alih implementasi fragmen WPF default dengan implementasi kustom Anda sendiri. Jika Anda melakukannya, Anda perlu mengatur Handled ke true; jika tidak, perilaku pemrosesan fragmen WPF default diterapkan.

Anda harus menghindari langsung memulai navigasi dari dalam FragmentNavigation penanganan aktivitas. Karena FragmentNavigation dinaikkan selama navigasi yang ada, memulai navigasi baru dari FragmentNavigation penanganan aktivitas membuat navigasi berlapis yang dapat menyebabkan ExecutionEngineException dilemparkan. Sebagai gantinya, Anda dapat secara tidak langsung memulai navigasi dengan membuat item kerja asinkron menggunakan Dispatcher.

Catatan

Saat NavigationService dinaikkan FragmentNavigation, itu juga menaikkan Application.FragmentNavigation peristiwa pada Application objek .

Penting

Navigasi fragmen tidak didukung untuk halaman XAML longgar (file XAML khusus markup dengan Page sebagai elemen akar) dalam kasus berikut:

• Saat menavigasi ke fragmen di halaman XAML yang longgar.

• Saat menavigasi dari halaman XAML longgar ke fragmen di halaman XAML lain yang longgar.

Namun, halaman XAML yang longgar dapat menavigasi ke fragmennya sendiri.

Berlaku untuk

Lihat juga