Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Silverlight中设置Usercontrol的父级_C#_Silverlight_Silverlight 5.0 - Fatal编程技术网

C# 在Silverlight中设置Usercontrol的父级

C# 在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 ---------------------------

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

我有一个Silverlight页面,通过将内容设置为框架元素来加载Usercontrol

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

我现在已经在做了。我正试着摆脱这一点,使用用户控件而不是页面。为什么要摆脱这一点呢?它可以让你保持你想要的状态。你可以这样做,但是你必须管理导航堆栈。谢谢你的代码。我试试看。从外观上看,该模式已经很有希望了。:-)