NavigationService.FragmentNavigation イベント
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
コンテンツ フラグメントへのナビゲーションが開始されるときに発生します。これは、目的のフラグメントが現在のコンテンツ内にある場合は直ちに発生し、目的のフラグメントが異なるコンテンツにある場合はソース XAML コンテンツが読み込まれた後に発生します。
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
イベントの種類
例
次の例は、 を処理 FragmentNavigation してカスタム フラグメント ナビゲーション動作を提供する方法を示しています。 この例では、ソース XAML ページのフラグメントが見つからない場合、エラー XAML ページを開きます。
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
注釈
既定では、コンテンツ フラグメントは、 という名前UIElementの に含まれるコンテンツです。これはUIElementName、 属性が設定されている です。たとえば、次のようになります。
<TextBlock Name="FragmentName">...</TextBlock>
XAML フラグメントに移動するには、次の形式のサフィックスを持つ URI を指定します。
# FragmentName
コンテンツ フラグメントを参照する URI の例を次に示します。
http://www.microsoft.com/targetpage.xaml#FragmentName
ソース ページが読み込まれた後 (イベントが発生した後 LoadCompleted )、フラグメント ナビゲーションが開始され、 NavigationService XAML フラグメントの検索が試行されます。 XAML フラグメントが見つかった場合は、 NavigationService フラグメントを表示するようにコンテンツ ナビゲーター (NavigationWindow、 Frame) に指示します。 この動作を変更する必要がある場合は、 を処理 FragmentNavigation して独自のフラグメント ナビゲーション動作を提供できます。 FragmentNavigation は、次を含む、この目的に役立つプロパティを公開するパラメーターを渡 FragmentNavigationEventArgs します。
このナビゲーション サービスを所有するナビゲーター (NavigationWindow、 Frame)。
フラグメント名。
を処理 FragmentNavigation して、既定の WPF フラグメント実装を独自のカスタム実装でオーバーライドできます。 これを行う場合は、 を にtrue
設定Handledする必要があります。それ以外の場合は、既定の WPF フラグメント処理動作が適用されます。
イベント ハンドラー内から直接ナビゲーションを開始しないようにする FragmentNavigation 必要があります。 は既存のナビゲーション中に発生するため FragmentNavigation 、イベント ハンドラーから新しいナビゲーションを FragmentNavigation 開始すると、入れ子になったナビゲーションが作成され、 ExecutionEngineException がスローされる可能性があります。 代わりに、 を使用して非同期作業項目を作成することで、間接的にナビゲーションを Dispatcher開始できます。
注意
が 発生FragmentNavigationするとNavigationService、 オブジェクトに対Applicationするイベントも発生Application.FragmentNavigationします。
重要
次の場合、フラグメント ナビゲーションは、緩やかな XAML ページ (ルート要素として を含む Page
マークアップのみの XAML ファイル) ではサポートされていません。
• 緩やかな XAML ページ内のフラグメントに移動する場合。
• 緩い XAML ページから別の緩い XAML ページ内のフラグメントに移動する場合。
ただし、Loose XAML ページは、自身のフラグメントに移動できます。
適用対象
こちらもご覧ください
.NET