因此,我必须将第二个窗口上的标签内容转换为主窗口上的文本框输入。我在同一窗口上执行此操作没有问题,但是我不知道如何跨多个窗口获取数据。到目前为止,我有很多事情,但是我无法使它起作用。这是我目前的代码:
public void Button_Click(object sender, RoutedEventArgs e)
{
label1.Content = textBox1.Text;
label2.Content = textBox2.Text;
}
所以我想做同样的事情,只有文本框在MainWindow上,标签在Window1上。 是否有捷径可寻?如果没有,那么什么是更好的选择?
答案 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应用程序时,建议使用 模式。