我有一个主窗口,它有一个按钮。当我按下主窗口按钮时,它将打开子窗口。在子窗口中,我有一个文本框,当我输入文本并单击子窗口中的添加按钮时,文本应显示在主窗口中。我该如何实现这一目标?提前谢谢。
答案 0 :(得分:1)
您可以创建MainWindow类的参数化构造函数,并将Textbox的值从子窗口传递到主窗口,在MainWindow中,您可以将内容设置为该标签。 这是实施 的 MainWindow.xmal.cs 强>
public partial class MainWindow : Window
{
public MainWindow ()
{
InitializeComponent();
}
public MainWindow (string text) : this()
{
label.Content = text;
}
private void button_Click (object sender, RoutedEventArgs e)
{
Window1 win1 = new Window1();
win1.Show();
this.Close();
}
}
以下是 subWindow的代码,即Window1.xaml.cs
public partial class Window1 : Window
{
private string text;
public Window1 ()
{
InitializeComponent();
}
private void button_Click (object sender, RoutedEventArgs e)
{
text = textBox.Text;
MainWindow mainWindow = new MainWindow(text);
mainWindow.Show();
this.Close();
}
}
答案 1 :(得分:1)
我会在您的“对话框”中添加一个事件。 MainWindow在实例化时可以订阅的子窗口。
DialogWindow:(子窗口):
public class DialogInputEventArgs : EventArgs
{
public string Input { get; set; }
}
public partial class DialogWindow : Window
{
public event EventHandler<DialogInputEventArgs> InputChanged = delegate { };
private void SubmitInputButton_Click(object sender, RoutedEventArgs e)
{
InputChanged(this, new DialogInputEventArgs() { Input = this._inputTextBox.Text });
}
}
<强>主窗口:强>
private void ShowDialogButton_Click(object sender, RoutedEventArgs e)
{
DialogWindow dw = new DialogWindow();
dw.InputChanged += OnDialogInputChanged;
dw.Show();
}
private void OnDialogInputChanged(object sender, DialogInputEventArgs e)
{
// update the MainWindow somehow using e.Input (the text submitted in dialog)
}
如果你需要这个机制用于多个窗口,我会选择更通用的东西,比如messagebus或observerpattern。
答案 2 :(得分:0)
您只需修改第二个窗口的构造函数:
public partial class Window1 : Window
{
string text;
public Window1 (string _text)
{
InitializeComponent();
this.text = _text;
}
}
答案 3 :(得分:0)
我建议您使用CaliburnMicro framwework来实现控件之间更简单,更好的通信(假设您使用的是MVVM模式)。您不必实现CaliburnMicro的所有功能,只需要EventAggregator来管理控件之间的发送和处理消息。