【问题标题】:How to update a Window instead of creating a new one in wpf如何更新窗口而不是在 wpf 中创建新窗口
【发布时间】:2020-10-25 20:49:44
【问题描述】:

我的 MainWindow 和 Window1 有一个程序。我在 MainWindow 中有一些按钮和一些标签,当我按下一个时,它会打开 Window1(所有这些按钮都会打开相同的 Window1,但内容不同,具体取决于我按下的按钮)。然后在 Window1 我有一个文本框和一个按钮,当我按下按钮时,它必须填充 MainWindow 中的一个标签,确实如此,问题是当尝试填充另一个标签时,它会删除我之前填充的标签.

主窗口:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window1 window1 = new Window1();
        if (sender.Equals(boton1))
        {
            window1.info.Content = "You pressed button 1";
        }
        else
        {
            window1.info.Content = "You pressed button 2";
        }
        window1.Show();
        this.Close();
    }
}

窗口1:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }
    MainWindow main;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        main = new MainWindow();
        if (Convert.ToString(label.Content) == "You pressed button 1")
        {
            main.label1.Content = textBox.Text;
        }
        else
        {
            main.label2.Content = textBox.Text;
        }
        main.Show();
        this.Close();
    }
}

我的完整项目有点不同但更大。对不起,如果你不明白我的意思,我不是以英语为母语的人。

【问题讨论】:

  • 您需要通知 Property Changed。
  • @IlanKeshet 抱歉,我应该如何将它添加到我的代码中?
  • 查看链接,它作为答案中的完整说明
  • 您需要对标签进行绑定,而不是直接更改其内容

标签: c# wpf


【解决方案1】:

如前所述,您正在创建一个新的 MainWindow,它否定了您之前的所有更改,请尝试将 MainWindow 分配为 Window1 的所有者,这样您就可以引用原始 Window。

类似这样的:
主窗口:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window1 window1 = new Window1();
        if (sender.Equals(boton1))
        {
            window1.info.Content = "You pressed button 1";
        }
        else
        {
            window1.info.Content = "You pressed button 2";
        }
        window1.Owner = this;  //Note I am adding the Owner here
        window1.Show();
        Hide();               // I also am hiding the MainWindow instead of closing it.
    }
}

窗口1:

public partial class Window1 : Window
{
    MainWindow main;
    public Window1()
    {
        InitializeComponent();
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        main = (MainWindow)Owner;    /Note I am using the owner not creating a new MainWindow
        if (Convert.ToString(label.Content) == "You pressed button 1")
        {
            main.label1.Content = textBox.Text;
        }
        else
        {
            main.label2.Content = textBox.Text;
        }
        main.Show();
        this.Close();
    }
}

【讨论】:

    【解决方案2】:

    因为你重新创建了 MainWindow。每次打开新窗口时,您都会在此类中创建 MainWindow 的新实例,这就是清除旧文本框的原因。

    试试这样的:

    主窗口:

    public partial class MainWindow : Window
    {
        
        public MainWindow()
        {
            InitializeComponent();
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Window1 window1 = new Window1();
            if (sender.Equals(boton1))
            {
                window1.info.Content = "You pressed button 1";
            }
            else
            {
                window1.info.Content = "You pressed button 2";
            }
            window1.ShowDialog();
            YourTexbox.Text = window1.YourText;
    
        }
    }
    

    窗口1:

    public partial class Window1 : Window
    {
        public string YourText {get; set;}
    
        public Window1()
        {
            InitializeComponent();
        }
        
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            if (Convert.ToString(label.Content) == "You pressed button 1")
            {
                YourText = textBox.Text;
            }
            else
            {
                YourText  = textBox.Text;
            }
            this.Close();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2012-12-09
      相关资源
      最近更新 更多