C# 从弹出窗口返回对象
我有一个弹出另一个窗口的窗口。我希望第二个窗口能够在按下按钮时将对象返回到第一个窗口。如何执行此操作?您可以在第二个窗口上公开属性,以便第一个窗口可以检索它C# 从弹出窗口返回对象,c#,wpf,C#,Wpf,我有一个弹出另一个窗口的窗口。我希望第二个窗口能够在按下按钮时将对象返回到第一个窗口。如何执行此操作?您可以在第二个窗口上公开属性,以便第一个窗口可以检索它 public class Window1 : Window { ... private void btnPromptFoo_Click(object sender, RoutedEventArgs e) { var w = new Window2(); if (w.ShowDialo
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; }
}
}
如果您不想公开属性,并且希望使用法更加明确,则可以重载
ShowDialog
:
public DialogResult ShowDialog(out MyObject result)
{
DialogResult dr = ShowDialog();
result = (dr == DialogResult.Cancel)
? null
: MyObjectInstance;
return dr;
}
我知道这是一个旧的,但我正在为我正在开发的WPF应用程序寻找相同的信息。我发现这个网站非常有用: 这是为Windows窗体编写的,但是如果您忽略了将值传递到新窗口的部分,它仍然有效,并且提供了一些非常好的信息 另一方面,要将值传递给新窗口,这非常有用:
神圣的火星母亲,我花了很长时间才明白: 窗口1:
if ((bool)window.ShowDialog() == true)
{
Window2 content = window.Content as Window2;
string result = content.result;
int i = 0;
}
窗口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();
}
}
XAML:
我就是这样做的
在父窗口中,按如下方式创建相应的ClosingEvent:
private void NewWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
NewWindow nw = (NewWindow)sender;
object Receiver = nw.Sender;
}
public partial class NewWindow : Window
{
public object Sender { get; set; }
public NewWindow()
{
InitializeComponent();
Sender = objectYouWantToSend;
}
}
…并在子窗口中更改代码,实现如下“发件人”:
private void NewWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
NewWindow nw = (NewWindow)sender;
object Receiver = nw.Sender;
}
public partial class NewWindow : Window
{
public object Sender { get; set; }
public NewWindow()
{
InitializeComponent();
Sender = objectYouWantToSend;
}
}
因此,当您将数据放入子窗口中的对象“Sender”时,关闭此窗口将把数据放入“Receiver”变量
我希望这会有所帮助。您可以简单地调用弹出窗口的任何方法,如下所示:
int value = 0;
if ((bool)poupWindow.ShowDialog() == true) {
value = poupWindow.GetValue();
}
新窗口是第一个窗口的模态吗?起初我甚至不知道模态窗口是什么,但我想出来了。下面Thomas的代码稍微编辑一下就成功了。这不起作用,因为用户与窗口交互并在我希望父窗口获取值之前按下一个按钮。我找到了答案。问题是它应该是if(w.ShowDialog()==false)。@reflow:你确定吗?当用户取消对话框时,ShowDialog返回false,因此在这种情况下,您可能不想考虑该值,这可能是因为在我的情况下,用户按下的按钮也会关闭窗口。您应该显式设置DialogResult,然后欢迎使用StackOverflow。虽然你提供的链接可能会有所帮助,但最好还是直接把要点放在你的帖子上。这样,如果链接断开,您的答案就不会变得无关紧要,而且更容易使用,也更有用。因此,我建议相应地编辑您的答案。顺致敬意,