主窗口上的文本框必须在wpf

时间:2018-10-23 15:08:53

标签: c# wpf window

因此,我必须将第二个窗口上的标签内容转换为主窗口上的文本框输入。我在同一窗口上执行此操作没有问题,但是我不知道如何跨多个窗口获取数据。到目前为止,我有很多事情,但是我无法使它起作用。这是我目前的代码:

        public void Button_Click(object sender, RoutedEventArgs e)
    {
        label1.Content = textBox1.Text;
        label2.Content = textBox2.Text;
    }

所以我想做同样的事情,只有文本框在MainWindow上,标签在Window1上。 是否有捷径可寻?如果没有,那么什么是更好的选择?

2 个答案:

答案 0 :(得分:0)

最简单的方法是在MainWindow上包含对Window1实例的引用。你可以写...

public void Button_Click(object sender, RoutedEventArgs e)
{
    Window1.label1.Content = textBox1.Text;
    Window1.label2.Content = textBox2.Text;
}

...尽管这很快就会演变成一大团意大利面。

一个更优雅的解决方案是使用所需的字符串属性创建一个ViewModel类,将MainWindow和Window1的DataContext设置为该类的相同实例,然后绑定TextBoxes和Labels这些属性。无需单击按钮即可使所有控件保持同步。

答案 1 :(得分:0)

如果要显示Window1中的MainWindow,则可以在创建实例时注入对MainWindow的引用:

public partial class Window1 : Window
{
    private readonly MainWindow _mainWindow;
    public Window1(MainWindow mainWindow)
    {
        InitializeComponent();
        _mainWindow = mainWindow;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        label1.Content = _mainWindow.textBox1.Text;
        label2.Content = _mainWindow.textBox2.Text;
    }
}

MainWindow:

Window1 win = new Window1(this);
win.Show();

您还可以像这样从MainWindow获取对Window1的引用:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
    if (mainWindow != null)
    {
        label1.Content = mainWindow.textBox1.Text;
        label2.Content = mainWindow.textBox2.Text;
    }
}

但是我建议您学习MVVM设计模式。在开发基于XAML的UI应用程序时,建议使用 模式。