C# 如何更新窗口而不是在wpf中创建新窗口

C# 如何更新窗口而不是在wpf中创建新窗口,c#,wpf,C#,Wpf,我有一个带有主窗口和Window1的程序。我在主窗口中有一些按钮和一些标签,当我按下其中一个按钮时,它会打开窗口1(所有这些按钮都会打开同一个窗口1,但根据我按下的按钮,内容不同)。然后在Window1中,我有一个文本框和一个按钮,当我按下按钮时,它必须填充主窗口中的一个标签,它确实填充了,问题是当尝试填充另一个标签时,它会删除我之前填充的标签 主窗口: public partial class MainWindow : Window { public MainWindow()

我有一个带有主窗口和Window1的程序。我在主窗口中有一些按钮和一些标签,当我按下其中一个按钮时,它会打开窗口1(所有这些按钮都会打开同一个窗口1,但根据我按下的按钮,内容不同)。然后在Window1中,我有一个文本框和一个按钮,当我按下按钮时,它必须填充主窗口中的一个标签,它确实填充了,问题是当尝试填充另一个标签时,它会删除我之前填充的标签

主窗口:

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();
    }
}
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;

    }
}
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
{
    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();
    }
}
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();
    }
}
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();
    }
}

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

因为您正在创建主窗口。每次打开新窗口时,都会在此类中创建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();
    }
}
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;

    }
}
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
{
    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();
    }
}
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();
    }
}
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();
    }
}

如前所述,您正在创建一个新的主窗口,它将否定您以前的所有更改,请尝试将主窗口指定为Window1的所有者,这样您就可以引用回原始窗口

类似这样的内容:
主窗口:

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();
    }
}
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;

    }
}
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
{
    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();
    }
}
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();
    }
}
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();
    }
}

您需要通知属性已更改。@Ilankshet抱歉,我应该如何将其添加到我的代码中?请查看链接,它是答案中的完整解释。您需要在标签上进行绑定,而不是直接更改其内容