c# - 使用可选参数初始化 WPF 窗口

标签 c# wpf

我有两个 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/

相关文章:

c# - 使用 DrawString 绘制无边框文本

c# - 为什么类类型参数的方差必须与其方法的返回/参数类型参数的方差匹配?

wpf - 仅查看属性(例如 : IsSelected) and the Model in MVVM

c# - 在 WPF 应用程序中使用 Xbox 360 Controller

WPF MahApps.Metro Tabcontrol 数据绑定(bind)?

c# - 入口点可以在 CoreCLR 上用 'async' 修饰符标记吗?

c# - C#/.NET 4.0 中新的 NoPIA 和类型等效功能是否意味着不再需要 Microsoft.mshtml.dll

c# - 将自定义 UserControl 添加到 Visual Studio 2005 的工具箱

wpf - 使用 WPF 和数据绑定(bind)时如何在 Visual Studio 11 上获得测试数据?

.net - 在WPF导航NavigationWindow中获取当前运行页面