在Silverlight中设置Usercontrol的父级

时间:2012-08-23 19:52:47

标签: c# silverlight silverlight-5.0

我正在尝试使用用户创建的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”

希望我很清楚。如果需要澄清,请告诉我。

干杯

2 个答案:

答案 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;
  }
}