我有两个 Windows。主窗口和自动导入。主要目标是在窗口之间切换,同时保持一个窗口处于事件状态而不关闭它。我希望一个显示而另一个隐藏。我可以通过使用一个窗口作为另一个窗口的参数来做到这一点。我遇到的唯一问题是当启动窗口是带有参数的窗口时。我猜这需要是可选的?我不确定你如何使用窗口来做到这一点。
当我的项目启动时,主窗口出现。代码是
public partial class MainWindow : Window
{
private AutoImport auto;
public MainWindow(AutoImport parent)
{
InitializeComponent();
auto = parent;
}
public void btnAutoImport_Click(object sender, RoutedEventArgs e)
{
this.Hide();
auto.Show();
}
}
如果我单击该按钮,主窗口应该隐藏,另一个窗口应该出现。代码是
public AutoImport()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Hide();
MainWindow main = new MainWindow(this);
main.Show();
}
然后可以对 AutoImport 进行更改,当单击此表单上的按钮时,AutoImport 将隐藏并出现一个新的主窗口。如果再次单击主窗口上的按钮,自动导入将显示之前所做的更改。当我在表单上切换代码时,这样做没有任何问题。
最佳答案
要执行您所要求的操作,您只需向 MainWindow 添加另一个构造函数即可:
public partial class MainWindow : Window
{
private AutoImport auto;
public MainWindow()
{
InitializeComponent();
}
public MainWindow(AutoImport parent)
{
InitializeComponent();
auto = parent;
}
public void btnAutoImport_Click(object sender, RoutedEventArgs e)
{
this.Hide();
if (auto == null) { auto = new AutoImport(); }
auto.Show();
}
}
尽管我认为在 AutoImport 中保留 MainWindow 实例的副本可能更有意义,因为您只是隐藏它。因此,当您创建 MainWindow 的实例时,您还创建了一个 AutoImport 的实例,将 MainWindow 设置为 AutoImport 的属性/字段。然后,当您单击该按钮时,窗口就会交换。这样您就不必每次都创建一个新的主窗口。像这样的事情:
public partial class MainWindow : Window
{
private AutoImport auto;
public MainWindow()
{
InitializeComponent();
}
public MainWindow_Loaded(object sender, EventArgs e)
{
auto = new AutoImport(this);
}
public void btnAutoImport_Click(object sender, RoutedEventArgs e)
{
this.Hide();
auto.Show();
}
}
public class AutoImport
{
private Window LinkedWindow { get; set; }
public AutoImport(Window parent)
{
InitializeComponent();
LinkedWindow = parent;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Hide();
LinkedWindow.Show();
}
}
关于c# - 使用可选参数初始化 WPF 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246293/