Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 单击按钮时,如何决定是否创建新窗口_C#_Wpf - Fatal编程技术网

C# 单击按钮时,如何决定是否创建新窗口

C# 单击按钮时,如何决定是否创建新窗口,c#,wpf,C#,Wpf,我有一个启动应用程序时出现的小窗口(winReset)。按“完成”后,主窗口打开 但是,主窗口包含一个按钮,单击该按钮后,将再次打开winReset。当您这次单击winReset上的“完成”时,我不想要主窗口的新实例,这与第一次不同。我只想关闭winReset 我这里的代码有问题 以下是迄今为止我在winReset背后的代码,但它不起作用: private void btnClickDone(object sender, RoutedEventArgs e) { Win

我有一个启动应用程序时出现的小窗口(winReset)。按“完成”后,主窗口打开

但是,主窗口包含一个按钮,单击该按钮后,将再次打开winReset。当您这次单击winReset上的“完成”时,我不想要主窗口的新实例,这与第一次不同。我只想关闭winReset

我这里的代码有问题

以下是迄今为止我在winReset背后的代码,但它不起作用:

private void btnClickDone(object sender, RoutedEventArgs e)
    {

        Window win = App.Current.Windows.OfType<Window>().SingleOrDefault(w => w.Name == "main");

        if (win.ShowDialog() == true)
        {

            this.Close();
        }

        else
        {
            MainWindow main = new MainWindow();
            App.Current.MainWindow = main;
            this.Close();
            main.Show();
          }
}
private void btnClickDone(对象发送方,路由目标)
{
Window win=App.Current.Windows.OfType().SingleOrDefault(w=>w.Name==“main”);
if(win.ShowDialog()==true)
{
这个。关闭();
}
其他的
{
MainWindow main=新的MainWindow();
App.Current.MainWindow=main;
这个。关闭();
main.Show();
}
}

我要做的是创建一个新的主窗口,如果它还不存在的话。如果有,则只需关闭当前winReset。我不确定我为什么要为此而挣扎,但我似乎无法理解这一点。有什么帮助吗?

您可以将main创建为本地对象,然后检查其是否为null

Private MainWindow _main = null;
然后在handler中--


当您想要遵循您的方法时,这应该适用于您:

Window win = App.Current.Windows.OfType<Window>().SingleOrDefault(w => w.DependencyObjectType.Name == "MainWindow");
if (win != null)
{
  this.Close();
}
else
{
  MainWindow main = new MainWindow();
  App.Current.MainWindow = main;
  this.Close();
  main.Show();
}
windowwin=App.Current.Windows.OfType().SingleOrDefault(w=>w.DependencyObjectType.Name==“MainWindow”);
if(win!=null)
{
这个。关闭();
}
其他的
{
MainWindow main=新的MainWindow();
App.Current.MainWindow=main;
这个。关闭();
main.Show();
}

您可以像这样检查App.Current.main窗口:

if (App.Current.MainWindow != null && App.Current.MainWindow.GetType() == typeof(MainWindow))
{
    this.Close();
}
else
{
    MainWindow main = new MainWindow();
    App.Current.MainWindow = main;
    this.Close();
    main.Show();
}

这很容易解决。重新创建
winReset
时,请将
bool
变量如
showMain
设置为
false
。一旦此变量为
false
,单击“完成”将关闭应用程序。如何从另一个窗口引用变量?如果在我的主窗口中创建_main,如何在我的winReset窗口中使用它?App Current main窗口将在实际需要时引用你的主窗口_main=App.Current.main窗口,这似乎不起作用。要创建第一个主窗口,它可以工作。但是,当我单击按钮并创建一个新的winReset时,单击“完成”后,会出现一个新的Main窗口。在打开弹出窗口之前,您需要设置\u Main窗口,并保留对它的引用。这样,每当您在if语句之外创建一个新的Main窗口实例时,我如何引用Main窗口?我无法执行
main=App.Current.MainWindow()必须强制转换其类型。您可以将
var main=App.Current.MainWindow作为MainWindow执行
var main=(MainWindow)App.Current.MainWindow
。。。不要将
MainWindow
类与
应用程序的
MainWindow
属性混淆,即使它们的名称相同。
if (App.Current.MainWindow != null && App.Current.MainWindow.GetType() == typeof(MainWindow))
{
    this.Close();
}
else
{
    MainWindow main = new MainWindow();
    App.Current.MainWindow = main;
    this.Close();
    main.Show();
}