По умолчанию старая страница хранится в памяти.
Фрейм имеет журнал.
Это довольно сложный аспект фреймов, поскольку он будет содержать ссылку на страницы.
Любая страница, которую вы добавляете во фрейм, остается активной, пока к ней привязывается журнал.
Из документов в KeepAlive есть довольно странный бит:
"Значение true, если экземпляр страницы сохраняется в истории переходов; в противном случае - значение false. Значение по умолчанию - false. "Что на самом деле означает, что по умолчанию это правда.И, как выясняется, нестандартное значение является своего рода верным.
Если это то, что вы хотите, то отлично.
Если это не то, что вы хотите, то у вас потенциально может быть проблема с памятью.
Код, демонстрирующий это:
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<Button Name="ShowPage1"
Content="Show Page One"
Tag="{x:Type local:Page1}"
Click="ShowPage_Click"
/>
<Button Name="ShowPage2"
Tag="{x:Type local:Page2}"
Click="ShowPage_Click"
Content="Show Page Two"/>
</StackPanel>
<Frame Grid.Column="1"
Name="TheFrame"
/>
</Grid>
Код позади
public MainWindow()
{
InitializeComponent();
}
private void ShowPage_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
Type pageType = btn.Tag as Type;
var pg = Activator.CreateInstance( pageType);
TheFrame.Content = pg;
}
Страница 1
Title="Page1"
Background="Yellow"
>
<StackPanel>
<TextBlock Text="This is Page 1"/>
<TextBox />
</StackPanel>
Page 2
Background="Pink"
>
<StackPanel>
<TextBlock Text="This is Page 2"/>
<TextBox />
</StackPanel>
Шаги.Нажмите Показать страницу 1 и введите текст в поле.

Нажмите Показать страницу 2 и введите что-нибудь в поле

Обратите внимание, что панель навигации есть.Нажмите назад, и вы увидите исходную страницу 1. Что находится в памяти.Нажмите вперед еще раз.Здесь мы снова со страницей 2.Нажмите Показать страницу 1. Введите 
Затем нажмите кнопку навигации, чтобы вернуться назад.
Угадайте, что?
Первый экземплярстраницы 1 все еще там.
В памяти.
Жив.
Даже если я вообще не устанавливал KeepAlive.
Вот мое решение: Фреймы - зло
Если установить для KeepAlive значение false, введенные мной данные исчезнут.
Так что это означает, что память освобождается?
Как выясняется, нет.
Не всегда.
Вы все равно обнаружите использование памяти.
Хитрые вещи.
Если вы не понимаете, как именноони работают, и вам хорошо с этим, лучше избегать рамок и страниц.
Все существенные проекты, над которыми я работал, вместо этого использовали Contentcontrol и UserControls, созданные на основе моделей представления с использованием первого шаблона viewmodel.