NavigationService.FragmentNavigation Evento
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Si verifica quando inizia lo spostamento su un frammento di contenuto, che si verifica immediatamente, se il frammento desiderato si trova nel contenuto corrente o dopo il caricamento del contenuto XAML di origine, se il frammento desiderato si trova in contenuto diverso.
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
Tipo evento
Esempio
Nell'esempio seguente viene illustrato come gestire FragmentNavigation per fornire un comportamento di navigazione del frammento personalizzato. In questo caso, l'esempio apre una pagina XAML di errore se il frammento nella pagina XAML di origine non viene trovato.
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
Commenti
Per impostazione predefinita, un frammento di contenuto è contenuto contenuto denominato UIElement, che è un oggetto il UIElement cui Name attributo è impostato, ad esempio:
<TextBlock Name="FragmentName">...</TextBlock>
Si passa a un frammento XAML fornendo un URI con un suffisso nel formato seguente:
# FragmentName
Di seguito viene illustrato un esempio di URI che fa riferimento a un frammento di contenuto:
http://www.microsoft.com/targetpage.xaml#FragmentName
Dopo il caricamento della pagina di origine (dopo LoadCompleted la generazione dell'evento), inizia lo spostamento tra frammenti e tenta NavigationService di individuare il frammento XAML. Se viene trovato il frammento XAML, NavigationService indica allo strumento di navigazione del contenuto (NavigationWindow, Frame) di visualizzare il frammento. Se è necessario modificare questo comportamento, è possibile gestire FragmentNavigation per fornire un comportamento di spostamento dei frammenti personalizzato. FragmentNavigation viene passato un FragmentNavigationEventArgs parametro che espone le proprietà utili a questo scopo, tra cui:
Strumento di navigazione proprietario di questo servizio di navigazione (NavigationWindow, Frame).
Nome del frammento.
È possibile gestire FragmentNavigation per eseguire l'override dell'implementazione predefinita del frammento WPF con la propria implementazione personalizzata. In tal caso, è necessario impostare su Handledtrue
; in caso contrario, viene applicato il comportamento di elaborazione dei frammenti WPF predefinito.
È consigliabile evitare di avviare direttamente la navigazione dall'interno di un FragmentNavigation gestore eventi. Poiché FragmentNavigation viene generato durante una navigazione esistente, l'avvio di una nuova navigazione da un FragmentNavigation gestore eventi crea una navigazione nidificata che può causare la ExecutionEngineException generazione di . È invece possibile avviare indirettamente la navigazione creando un elemento di lavoro asincrono usando .Dispatcher
Nota
Quando NavigationService genera FragmentNavigation, genera Application.FragmentNavigation anche l'evento sull'oggetto Application .
Importante
Lo spostamento tra frammenti non è supportato per le pagine XAML sciolte (file XAML solo markup con Page
come elemento radice) nei casi seguenti:
• Quando si passa a un frammento in una pagina XAML separata.
• Quando si passa da una pagina XAML separata a un frammento in un'altra pagina XAML separata.
Tuttavia, una pagina XAML separata può passare ai propri frammenti.