导航问题,小白求助

meyerxy 2015-12-04 09:40:06
情况如下:
1、项目中存在四个页面:page1、page2、page3、page4、
2、wpf程序中含有一个承载页面的Frame和四个RadioButton,结构及命名如下:
      <Grid>
<Frame X:Name=page1 margin……/>
<RadioButton X:Name=page1 margin……/> <RadioButton X:Name=page3 margin……/>
<RadioButton X:Name=page2 margin……/> <RadioButton X:Name=page4 margin……/>
<Grid>

3、C#后台:
        private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
RadioButton button = (RadioButton)sender;
Uri uri= new Uri(button.Name + ".xaml", UriKind.Relative);
frame.Source = uri;

}

问题如下:
1、以上可以实现页面导航,但每次都是创建新实例的方式进行,这和我所想实现的不一样。
2、我想实现:如果点击 RadioButton后,导航前先对比导航历史记录,如果历史记录中存在相同的Content,那么就返回Content所代表的页面,不存在才创建页面新实例。
比如:frame导航条中,除了前进后退钮外,还有一个下拉按钮,下拉菜单弹出后,就可点击相应的条目,返回指定的页面。
我需要的就是点击条目,返回指定页这样类似的功能,不过是将点击转化为搜索导航历史记录而已。

只有35分了额..............
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyaxi 2015-12-04
  • 打赏
  • 举报
回复
加个标示,已经打开过的页面,根据标示条件,直接显示
exception92 2015-12-04
  • 打赏
  • 举报
回复
貌似有个 BackStack 属性,,
meyerxy 2015-12-04
  • 打赏
  • 举报
回复
沉了、沉了,我顶起来。
来个高手指点下思路吧,问题的关键好像是怎么获得导航历史记录?搜索都是次要的
meyerxy 2015-12-04
  • 打赏
  • 举报
回复
        ObservableCollection<Uri> list = new ObservableCollection<Uri>();
        private void RadioButton_Checked(object sender, RoutedEventArgs e)
        {   
            RadioButton button = (RadioButton)sender;
            Uri uri= new Uri(button.Name + ".xaml", UriKind.Relative);
            bool cont = list.Contains(uri);
            if (cont != true) { list.Add(uri); frame.Source = uri;}
            else
            {
                int s = list.IndexOf(uri);
                for (int i = 0; i < list.Count; i++) { if (frame.CanGoBack) frame.GoBack(); }
                for (int i = 0; i < s; i++) { frame.GoForward(); }
            }
        }
没办法,只能用笨办法,各位师兄! 此法是否可行?
meyerxy 2015-12-04
  • 打赏
  • 举报
回复
实在不行,我就用TabControl,承载4个Frame 不导航了
meyerxy 2015-12-04
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
你可以在一个StackPanel中放入两个Button,然后捕获点击事件之后,再动态地在另外一个Grid中动态放入内容。没有必要用 Frame。
这不行,因四个page都要绑定数据库,对应着,客户订单及资料,产品生产情况,职工资料及工资、产品配送交付 等几块内容。 我这里需要返回原来的页面,是因为有时职工或客户到来时,能及时对他们给予的资料进行纪律,而且又不影响当前正在进行的工作
  • 打赏
  • 举报
回复
引用 1 楼 meyerxy 的回复:
沉了、沉了,我顶起来。 来个高手指点下思路吧,问题的关键好像是怎么获得导航历史记录?搜索都是次要的
你自己声明一个 static List<IYourControl> 或者 static Queue<IYourControl> 对象就行了。这个还要什么“控件”吗?
  • 打赏
  • 举报
回复
你可以在一个StackPanel中放入两个Button,然后捕获点击事件之后,再动态地在另外一个Grid中动态放入内容。没有必要用 Frame。
meyerxy 2015-12-04
  • 打赏
  • 举报
回复
BackStack或ForwardStack 该怎么使用啊!

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧