WPF中Frame内的关闭页面

时间:2014-09-07 08:17:00

标签: c# wpf-4.0

我有一个窗口和一个框架。在那个框架中,我打开了许多页面,我想点击“关闭”按钮关闭,  问题是页面无法看到我的框架我试图在一个事件中写一个关闭按钮的页面方法 在主窗口中执行另一个事件,因为在主窗口上查看框架很容易,但它不起作用。这是我在页面中的代码

  private void closebt_MouseDown(object sender, MouseButtonEventArgs e)
     {
        var main = new MainWindow();
       main.Exitbt_PreviewKeyDown(main.Exitbt, e);

     }

这是主窗口中的代码

 internal void Exitbt_PreviewKeyDown(object sender, MouseButtonEventArgs e)
      {
         ProjectorFrame.Content = "";
         MessageBox.Show("done");
      } 

虽然消息显示但它不是关闭页面 请帮帮我。

1 个答案:

答案 0 :(得分:3)

我不知道为什么你在closebt_MouseDown hander中创建另一个MainWindow实例,但我希望以下代码对你有所帮助:

private void closebt_MouseDown(object sender, MouseButtonEventArgs e)
{
    MainWindow main = Application.Current.MainWindow as MainWindow;
    if (main != null)
    {
        main.Exitbt_PreviewKeyDown(main.Exitbt, e);
        main.Close();
    }
}

<强>编辑:

我认为你的应用程序的主要Window对象是MainWindow,所以我认为前面的代码可以让你的应用程序窗口关闭。 但正如您所评论的那样,Application.Current.MainWindowMainWindow不同,main变为null

因此,我认为获取主Window对象的简单方法是在页面类中创建以下构造函数以保留引用:

class YourPageClass
{
    public YourPageClass(MainWindow mainWindow)
    {
        main = mainWindow;
    }
    private MainWindow main;

    (snip)
}

然后,通过传递主Window对象来创建此实例:

// somewhere in MainWindow code where instantiate your page object
var page = new YourPageClass(this);

通过这样做,您可以获得主Window对象。 现在,您可以按如下方式关闭Window对象:

// in YourPageClass code

private void closebt_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (main != null)
    {
        main.Exitbt_PreviewKeyDown(main.Exitbt, e);
        main.Close();
    }
}