C# 在Silverlight中设置Usercontrol的父级
我正在尝试使用用户创建的UserControl实现类似导航的布局 我有一个Silverlight页面,通过将内容设置为框架元素来加载UsercontrolC# 在Silverlight中设置Usercontrol的父级,c#,silverlight,silverlight-5.0,C#,Silverlight,Silverlight 5.0,我正在尝试使用用户创建的UserControl实现类似导航的布局 我有一个Silverlight页面,通过将内容设置为框架元素来加载Usercontrol UserControl1 uc1 = new UserControl1(); this.Frame.Content = uc1; 类似地,我在每个UserControl中都有一个框架,其中内容被设置为一个框架 这很有效 问题: 我有目前的情况 |用户控制1 |用户控制2 |用户控制3 ---------------------------
UserControl1 uc1 = new UserControl1();
this.Frame.Content = uc1;
类似地,我在每个UserControl中都有一个框架,其中内容被设置为一个框架
这很有效
问题:
我有目前的情况
|用户控制1 |用户控制2 |用户控制3--------------------------------------------------------------------------
UserControl1|儿童|
UserControl2|父项|子项
用户控制3 | |父级|
因此,现在我试图实现的是,当用户从UserControl1打开UserControl2时,我需要能够从UserControl2移回父级(UserControl1),与之前的状态相同 这真的可能吗?如果是,那么应该怎么做? 任何提示、代码、文章参考都将不胜感激 原因: 我试图避免在页面查询中传递变量,并使用usercontrols 场景: 例如,如果用户在UserControl1内的文本框中写下“Hello World”并按下按钮,则加载UserControl2。在他按下UserControl2中的OK之后,返回UserControl1,文本框仍然显示“Hello World” 希望我明白了。如果需要任何澄清,请告诉我
Cheers是的,这是可能的,但是您的控件不应该是UserControls,而应该继承自,并且您应该使用框架的导航方法来设置第一页
this.Frame.Navigate(new Uri("Page1.xaml", UriKind.Relative));
然后,要从第1页导航到第2页,请使用该页的
NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));
下面是一个示例,说明您可以如何执行此操作:
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;
}
}
List-navigationStack=new-List();
public void NavigateTo(UserControl newUC)
{
//导航到新控件时,请将旧控件保留在内存中
if(this.Frame.Content!=null)
navigationStack.Add(this.Frame.Content作为用户控件);
this.Frame.Content=newUC;
}
public-void-NavigateBack()
{
//导航回内存中的旧控件时,
//从导航堆栈中检索它
UserControl oldUC=navigationStack.LastOrDefault();
如果(oldUC!=null)
{
navigationStack.Remove(旧版);
this.Frame.Content=oldUC;
}
}
我现在已经在做了。我正试着摆脱这一点,使用用户控件而不是页面。为什么要摆脱这一点呢?它可以让你保持你想要的状态。你可以这样做,但是你必须管理导航堆栈。谢谢你的代码。我试试看。从外观上看,该模式已经很有希望了。:-)