NavigationService.FragmentNavigation 事件

定義

發生于流覽至內容片段時,如果所需的片段位於目前內容中,或載入來源 XAML 內容之後,如果所需的片段位於不同的內容中,就會立即發生。

C#
public event System.Windows.Navigation.FragmentNavigationEventHandler FragmentNavigation;

事件類型

範例

下列範例示範如何處理 FragmentNavigation 以提供自訂片段流覽行為。 在此情況下,如果找不到來源 XAML 頁面中的片段,此範例就會開啟錯誤 XAML 頁面。

C#
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;
    }
}

備註

根據預設,內容片段是由具名 UIElement 包含的內容,也就是 UIElementName 其屬性已設定的 ,例如:

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

您可以藉由提供具有下列格式尾碼的 URI 來流覽至 XAML 片段:

# FragmentName

以下顯示參考內容片段的 URI 範例:

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

在引發事件) 之後載入來源頁面 (之後 LoadCompleted ,片段流覽就會開始,並 NavigationService 嘗試尋找 XAML 片段。 如果找到 XAML 片段, NavigationService 會指示內容導覽器 (NavigationWindowFrame) 顯示片段。 如果您需要變更此行為,您可以處理 FragmentNavigation 以提供您自己的片段流覽行為。 FragmentNavigation 會傳遞參數 FragmentNavigationEventArgs ,此參數會公開適用于此用途的屬性,包括:

您可以使用自己的自訂實作來覆 FragmentNavigation 寫預設 WPF 片段實作。 如果這樣做,您必須設定 Handledtrue ,否則會套用預設 WPF 片段處理行為。

您應該避免從事件處理常式內 FragmentNavigation 直接起始流覽。 由於 FragmentNavigation 會在現有的導覽期間引發,因此從 FragmentNavigation 事件處理常式起始新的流覽會建立巢狀導覽,而可能導致 ExecutionEngineException 擲回 。 相反地,您可以使用 建立異步工作專案 Dispatcher ,以間接起始流覽。

備註

當 引發 FragmentNavigationNavigationService ,也會在 物件上 Application 引發 Application.FragmentNavigation 事件。

重要

在下列情況下,鬆散 XAML 頁面不支援片段導覽, (標記 Page 專用 XAML 檔案作為根項目) :

• 流覽至鬆散 XAML 頁面中的片段時。

• 從鬆散 XAML 頁面巡覽到另一個鬆散 XAML 頁面中的片段時。

不過,鬆散的 XAML 頁面可以巡覽至自己的片段。

適用於

產品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

另請參閱