WPF将文本从一个窗口传递到另一个窗口

时间:2017-09-07 06:12:17

标签: c# wpf

我有一个主窗口,它有一个按钮。当我按下主窗口按钮时,它将打开子窗口。在子窗口中,我有一个文本框,当我输入文本并单击子窗口中的添加按钮时,文本应显示在主窗口中。我该如何实现这一目标?提前谢谢。

4 个答案:

答案 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来管理控件之间的发送和处理消息。