0

我正在尝试使用用户创建的 UserControl 来实现类似布局的导航。

我有一个 Silverlight 页面,它通过将内容设置为框架元素来加载用户控件。

UserControl1 uc1 = new UserControl1();
this.Frame.Content = uc1;

同样,我在每个 UserControl 中都有一个 Frame,其中内容设置为 Frame。

这很好用。

问题: 我有目前的情况

                       |用户控件1 | 用户控件2 | 用户控件3
------------------------------------------------ -------------------------
用户控件1 | | 儿童 |
用户控件2 | 家长 | |儿童
用户控制3 | |家长 |

所以现在我想要实现的是,当用户从 UserControl1 打开 UserControl2 时,我需要能够以与之前相同的状态从 UserControl2 移回父级(UserControl1) 。

这真的可能吗?如果是,那么应该怎么做?任何提示,代码,文章参考都表示赞赏......

原因:

我试图避免在页面查询中传递变量并使用用户控件。

设想:

例如,如果用户在 UserControl1 内的文本框中写入“Hello World”并按下按钮,则加载 UserControl2。在他按下 UserControl2 中的 OK 后,返回到 UserControl1,文本框仍显示“Hello World”

希望我很清楚。让我知道是否需要任何澄清。

干杯

4

2 回答 2

0

是的,这是可能的,但你的控件不应该是 UserControls,而是从Page继承,你应该使用 Frame 的 Navigate 方法来设置第一页

this.Frame.Navigate(new Uri("Page1.xaml", UriKind.Relative));

然后从第 1 页导航到第 2 页,使用Page的NavigationService

NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));
于 2012-08-23T20:57:34.700 回答
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;
  }
}
于 2012-08-27T06:21:19.547 回答