NavigationService.FragmentNavigation Kejadian
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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:
Navigator yang memiliki layanan navigasi ini (NavigationWindow, Frame).
Nama fragmen.
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.