【问题标题】:Open a dialog in the same window and wait for user input在同一窗口中打开一个对话框并等待用户输入
【发布时间】:2013-08-05 19:38:49
【问题描述】:

有没有办法在主应用程序窗口中打开一个新窗口实例,并在继续主程序之前仍然等待用户响应?我只有一个 3 选项查询,其中包含要提供给用户的图片,并且打开一个全新的窗口似乎有点矫枉过正,我更希望它在当前窗口的框架中打开。

在没有单独的窗口的情况下做这样的事情:

 OptionWindow optionDialog = new OptionWindow();
 optionDialog.Owner = this;
 optionDialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;
 optionDialog.ShowDialog();
 if (optionDialog.DialogResult == true)
 {
    something;
 {

【问题讨论】:

  • 你的问题我不清楚。你能详细说明或发布截图吗?
  • 听起来你想要一个模态对话框。它们在打开时阻塞程序流,这比实现某些框架并必须阻塞所有输入要快得多。
  • 听起来你想在现有的 Wpf 窗口中嵌入一个 Wpf 窗口,据我所知这是不可能的。您可以尝试使用 UserControl 并禁用所有其他项目,直到完成。

标签: c# wpf


【解决方案1】:

似乎您可以让您的“OptionWindow”成为 WPF 表单上的一个框架,当您想要显示它时,只需禁用所有其他面板并使用您的对话框显示框架,然后在用户完成对话框,启用所有其他面板并隐藏您的对话框框架。

在我发布答案后,我看到 Mark Hall 对他的评论进行了编辑,并提出了几乎相同的建议。对不起马克。

【讨论】:

  • 所有信息都可以从选项窗口传输到主程序并放在一个框架中,这实际上是我最初设置的方式。但是在用户做出选择之前,我不知道如何阻止程序的其他部分运行。
  • 我不确定你的主程序窗口有多复杂,但我的想法是禁用所有其他控件,或者更改框架的可见性并将它们隐藏,以及它们何时选项框架上的一个选项,再次启用并显示其他控件,然后隐藏您的框架。
  • 对话框当前在事件中间打开。是否有办法暂停程序,使其在用户输入之前不会继续到事件的后面部分?对话框暂停处理主窗口中的其他命令,直到对话框关闭。有没有办法在使用框架而不是对话框时产生类似的效果?
  • private bool DialogComplete {get; set;} protected void Some_Event(object sender, EventArgs e) { /* Current event code before dialog show */ DialogComplete = false; ShowOptions(); /* Current event code after dialog show */ } protected void ShowOptions() { /* Show the dialog and hide everything else and stuff */ while(!DialogComplete) { } } protected void btnDialogFinish_Click(object sender, EventArgs e) { DialogComplete = true; }
  • 有点难看,你甚至可能需要启动一个新线程。为了感谢我的灵感,这是我从以下问题得到的:stackoverflow.com/questions/15888608/…
【解决方案2】:

我猜你正在寻找可以使用Window.Showdialog 实现的modal window

打开一个窗口,只有当新打开的窗口是 关闭。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多