我正在尝试使用用户创建的UserControl来实现布局之类的导航。
我有一个Silverlight页面,通过将内容设置为框架元素来加载Usercontrol。
UserControl1 uc1 = new UserControl1();
this.Frame.Content = uc1;
同样,我在每个UserControl中都有一个Frame,其内容设置为Frame。
这很好用。
问题: 我有目前的情况
| UserControl1 | UserControl2 | UserControl3
-------------------------------------------------- ------------------------
UserControl1 | |儿童|
UserControl2 |父母| |孩子
UserControl3 | |家长|
所以现在我想要实现的是,当用户从UserControl1打开UserControl2时,我需要能够以与之前相同的状态从UserControl2移回到父(UserControl1)
这实际上可行吗?如果是,那应该怎么做? 任何提示,代码,文章参考都赞赏...
原因:
我试图避免在页面查询中传递变量并使用usercontrols。
情境:
例如,如果用户在UserControl1内的文本框中编写“Hello World”并按下按钮,则加载UserControl2。在UserControl2中按OK后返回UserControl1,文本框仍然显示“Hello World”
希望我很清楚。如果需要澄清,请告诉我。干杯
答案 0 :(得分:0)
是的,这是可能的,但您的控件不应该是UserControls,而是继承自Page,您应该使用Frame的Navigate方法来设置第一页
this.Frame.Navigate(new Uri("Page1.xaml", UriKind.Relative));
然后,要从第1页导航到第2页,请使用页面的NavigationService
NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));
答案 1 :(得分:0)
以下是您可能会这样做的示例:
List<UserControl> navigationStack = new List<UserControl>();
public void NavigateTo(UserControl newUC)
{
// when navigating to a new control, keep the old one in memory
if (this.Frame.Content != null)
navigationStack.Add(this.Frame.Content as UserControl);
this.Frame.Content = newUC;
}
public void NavigateBack()
{
// when navigating back to an old control in memory,
// retrieve it off the navigation stack
UserControl oldUC = navigationStack.LastOrDefault();
if (oldUC != null)
{
navigationStack.Remove(oldUC);
this.Frame.Content = oldUC;
}
}