Запретить WPF Frame хранить историю в стеке

Похоже, это было бы простым решением, но я трачу слишком много времени, пытаясь понять это. Возможно, я неправильно проектирую свое приложение (что может быть так), поэтому, пожалуйста, помогите мне, если у вас есть лучшее решение.

Я разрабатываю приложение WPF корпоративного уровня, которое во многом похоже на Outlook с Ribbon вместо панели инструментов. У меня есть много разных модулей, которые загружаются в кадр, когда пользователь нажимает на RibbonButton, Имейте в виду, что его лента распределяется по всем модулям.

Так что у меня есть снаряд с лентой и рамой. Когда пользователь нажимает на кнопку ленты, он загружает соответствующий модуль (usercontrol) в кадр. Все хорошо. Тем не менее, если я перейду к другому модулю (нажав на другую кнопку RibbonButton), а затем нажмите на оригинал RibbonButtonТеперь у меня есть два открытых экземпляра одного и того же модуля... но только один показан в кадре... другой модуль находится в стеке кадра.

Итак, мой вопрос, как я могу сказать фрейму закрыть usercontrol при переходе к другому модулю? Я пытался установить JournalEntry.KeepAlive="False", но это все еще не сработало. Какие-нибудь мысли? На самом деле не так много кода для публикации, но я могу сделать это, если это поможет вам.

1 ответ

Решение

Если вы никогда не собираетесь возвращаться к предыдущей записи, вы можете использовать NavigationService.RemoveBackEntry(), чтобы очистить историю каждый раз, когда вы переходите. Самый простой способ сделать это - обработать событие Navigated фрейма:

frame.Navigated += frame_Navigated;

void frame_Navigated(object sender, NavigationEventArgs e)
{
    frame.NavigationService.RemoveBackEntry();
}
Другие вопросы по тегам