从弹出窗口返回一个对象

Ref*_*lux 39 c# wpf

我有一个窗口弹出另一个窗口.我希望第二个窗口能够在按下按钮时将对象返回到第一个窗口.我该怎么做?

Tho*_*que 52

您可以在第二个窗口中公开属性,以便第一个窗口可以检索它.

public class Window1 : Window
{
    ...

    private void btnPromptFoo_Click(object sender, RoutedEventArgs e)
    {
        var w = new Window2();
        if (w.ShowDialog() == true)
        {
            string foo = w.Foo;
            ...
        }
    }
}

public class Window2 : Window
{
    ...

    public string Foo
    {
        get { return txtFoo.Text; }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 我想到了.问题是它应该是if(w.ShowDialog()== false). (4认同)
  • 您应该明确地设置DialogResult (3认同)

Rob*_*ney 20

如果您不想公开属性,并且希望更明确地使用该用法,则可以重载ShowDialog:

public DialogResult ShowDialog(out MyObject result)
{
   DialogResult dr = ShowDialog();
   result = (dr == DialogResult.Cancel) 
      ? null 
      : MyObjectInstance;
   return dr;
}
Run Code Online (Sandbox Code Playgroud)


Ver*_*ile 6

神圣的火星之母,我花了很长时间才弄清楚:

窗口 1:

if ((bool)window.ShowDialog() == true)
{
   Window2 content = window.Content as Window2;
   string result = content.result;
   int i = 0;
}
Run Code Online (Sandbox Code Playgroud)

窗口 2:

public partial class Window2 : UserControl
{
    public string result
    {
        get { return resultTextBox.Text; }
    }

    public Window2()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window.GetWindow(this).DialogResult = true;
        Window.GetWindow(this).Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<Button IsDefault="True" ... />
Run Code Online (Sandbox Code Playgroud)