Запретить WPF Frame хранить историю в стеке - PullRequest
8 голосов
/ 18 февраля 2010

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

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

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

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

1 Ответ

10 голосов
/ 18 февраля 2010

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

frame.Navigated += frame_Navigated;

void frame_Navigated(object sender, NavigationEventArgs e)
{
    frame.NavigationService.RemoveBackEntry();
}
...