所以这听起来很奇怪但是当我执行' this.Content'时,我总是得到一个stackoverflow异常。 3次。
所以我有一个存储所有userControls的主窗口,所以我不必一直创建它们:
public partial class MainWindow : Window
{
CreateSessionWindow csw;
RateSessionWindow rsw;
CloseSessionWindow closesw;
MainMenuWindow mmw;
public MainWindow()
{
InitializeComponent();
csw = new CreateSessionWindow();
rsw = new RateSessionWindow();
closesw = new CloseSessionWindow();
mmw = new MainMenuWindow();
AllSessionWindows.csw = csw;
AllSessionWindows.rsw = rsw;
AllSessionWindows.closesw = closesw;
AllSessionWindows.mmw = mmw;
}
private void bttnStartProgram_Click(object sender, RoutedEventArgs e)
{
this.Content = AllSessionWindows.mmw;
}
}
public static class AllSessionWindows
{
public static RateSessionWindow rsw;
public static CloseSessionWindow closesw;
public static CreateSessionWindow csw;
public static MainMenuWindow mmw;
}
在我的MainMenuWindow类中,我有一个按钮,当我点击按钮时,它会更改内容:
public partial class MainMenuWindow : UserControl
{
public MainMenuWindow()
{
InitializeComponent();
}
private void bttnCreateSession_Click(object sender, RoutedEventArgs e)
{
this.Content = AllSessionWindows.csw; //here
}
}
这是我通常得到的stackoverflowexception:
public partial class CreateSessionWindow : UserControl
{
public CreateSessionWindow()
{
InitializeComponent();
}
private void bttnGoBack_Click(object sender, RoutedEventArgs e)
{
this.Content = AllSessionWindows.mmw; //here I always get the exception
}
}
所以无论我调用this.Content(例如,第一个mmw而不是csw或csw而不是mmw)我总是得到一个stackoverflow异常,当我调用它3次,你可以在上面看到。可能是什么问题?
答案 0 :(得分:0)
代码中的问题是UserControls中的this.Content=...
(在这种情况下,this.Content
UserControl
内容不是Window
内容。如果要在主窗口中更改内容,则应将MainWindow的属性添加到类AllSessionWindows
:
public static class AllSessionWindows
{
public static MainWindow MainWindow;
public static RateSessionWindow rsw;
public static CloseSessionWindow closesw;
public static CreateSessionWindow csw;
public static MainMenuWindow mmw;
}
在MainWidnow构造函数中,您必须分配此属性:
public MainWindow()
{
InitializeComponent();
...
AllSessionWindows.MainWindow = this;
}
在UserControl中,您应该使用以下代码:
private void bttnCreateSession_Click(object sender, RoutedEventArgs e)
{
AllSessionWindows.MainWindow.Content = AllSessionWindows.csw;
}
您提出的解决此类问题的方法并非最佳解决方案。对于此类问题,您可以使用Caliburn.Micro框架。 在以下链接中,您可以找到一个很好的教程:
http://www.mindscapehq.com/blog/index.php/2012/1/12/caliburn-micro-part-1-getting-started/