Impedire WPF Telaio di memorizzare la storia della pila
-
21-09-2019 - |
Domanda
Questo mi sembra che sarebbe una soluzione facile, ma sto sprecando troppo tempo cercando di capire questo fuori. Forse sto progettando la mia domanda in modo errato (che potrebbe essere il caso), quindi ti prego di aiutarmi se si dispone di una soluzione migliore.
Sto progettando un'applicazione WPF livello enterprise che assomiglia molto a Outlook con un Ribbon
invece di una barra degli strumenti. Ho un sacco di diversi moduli che vengono caricati in un frame quando l'utente preme il RibbonButton
. Tenete a mente che il suo nastro è condivisa preferito su tutti i moduli.
Così ho un guscio con un nastro e un telaio. Quando l'utente preme il pulsante del nastro, si carica il modulo corretto (usercontrol) nel telaio. Va tutto bene. Tuttavia, se ci si dirige verso un altro modulo (facendo clic su un altro RibbonButton), e quindi fare clic sul RibbonButton
originale, ora ho due istanze dello stesso modulo aperto ... ma è mostrato solo uno nel telaio ... l'altro modulo è in stack del telaio.
Quindi la mia domanda è, come dico la cornice per chiudere l'UserControl quando naviga verso un modulo diverso? Ho provato a installare il JournalEntry.KeepAlive="False"
, ma che ancora non ha funzionato. qualche idea? In realtà non è molto codice per pubblicare, ma posso farlo se vi aiuterà.
Soluzione
Se non ha intenzione di andare "indietro" per la voce precedente, è possibile utilizzare NavigationService.RemoveBackEntry () per cancellare la cronologia ogni volta che navigare. Il modo più semplice per farlo è quello di gestire il frame evento navigato :
frame.Navigated += frame_Navigated;
void frame_Navigated(object sender, NavigationEventArgs e)
{
frame.NavigationService.RemoveBackEntry();
}