我的主窗口上有一个框架。我有一个ItemsControl,在其中我显示垂直菜单,用户可以从中选择任何项目,并且框架中会显示与特定项目对应的页面。
这很有效。
当我将NavigationUIVisibility设置为Automatic时:
1) Navigation Bar is displayed at the top.
2) If I enter some data in a textbox in page1 and then if I navigate away to page2.
Now again if I navigate to page1, the text in the textbox is there.
我想要的是:
1) Hide the Navigation bar. For that I have set NavigationUIVisibility to Hidden.
This works good.
2) I want frame to remember history as I discussed in point 2 in above topic.
So, How to remember history when NavigationUIVisibility is set to hidden.
Or is there any other way to remember history when navigation bar is hidden.
答案 0 :(得分:2)
您可以重新设置NavigationFrame
和NavigationWindow
的样式,使它们看起来完全不同。事实上,以下所有这些图像都是NavigationWindow
s,甚至根本没有任何导航UI。
我整理了一个开源库,用于在http://winchrome.codeplex.com重新设置这些样式,以便您可以从样式中窃取所需的部分。事实上,如果你只想要一个带左侧菜单的导航面板,那么它已经涵盖了该项目的一些演示。
回答你的问题TextBox
清除它的原因很大程度上取决于你导航的内容,在某些情况下,这与历史无关。
让我们开始吧,让我们考虑一下MyPage.xaml
<Page x:class="MyPage"...>
<TextBox/>
</Page>
MyPage
,那么它仍将具有相同的值。 new MyPage()
,则默认情况下TextBox
将为空。MyPage
,因此在TextBox
中看到相同的值。现在让我们考虑一下我们是否使用绑定到ViewModel的MVVM样式视图。 在MyPage.xaml
中<Page ...>
<TextBox Text="{Binding MyData}"/>
</Page>
在DataViewModel.cs
中public class DataViewModel : INotifyPropertyChanged
{
private string myData;
public string MyData
{
get { return myData;}
set { ... }
//Normal implementation of INotifyPropertyChanged etc for MVVM
}
new Page()
的{{1}},则两个ViewModel
将始终保持同步并显示相同的数据。Page
并依赖ViewModel
来创建视图,那么您仍然有两个视图,但都是从同一个ViewModel同步。DataTemplate
,因此请再次查看原始数据。答案 1 :(得分:1)
Frame class有一个名为BackStack的属性,它保留了Frame的后退导航历史记录。无论NavigationUIVisibility设置如何,都可以使用此属性。
答案 2 :(得分:1)
使用PageFunction代替,这有助于您向后导航保留该页面的值..
的Page1.xaml:
<PageFunction
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="XYZ"
x:TypeArguments="sys:String"
Title="page1">
<TextBox x:Name="textbox"/>
<Button x:Name="button" Click="button_clicked"/>
</PageFunction>
private void button_clicked(object sender, RoutedEventArgs e)
{
Page2 page2 = new Page2();
page2.Return += page2_Return;
this.NavigationService.Navigate(page2);
}
void page2_Return(object sender, ReturnEventArgs<String> e)
{
OnReturn(new ReturnEventArgs<String>(null));
}
Page2.Xaml:
<PageFunction
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="PQR"
x:TypeArguments="sys:String"
Title="page2">
...
</PageFunction>
void BackButton_Click(object sender, RoutedEventArgs e)
{
OnReturn(new ReturnEventArgs<String>(null));
}