【问题标题】:Why does showing a OpenFileDialog in WPF block my WPF Popup?为什么在 WPF 中显示 OpenFileDialog 会阻止我的 WPF 弹出窗口?
【发布时间】:2010-11-22 18:21:02
【问题描述】:

我有一个 WPF 应用程序,我在其中使用转义键打开一个弹出菜单(弹出控件)。在该弹出菜单中,我按下按钮时打开一个文件对话框,按下按钮时关闭弹出窗口。当我下次按下 esc 按钮时它不会弹出,直到我关注另一个程序,例如。重设焦点。有谁知道是什么原因造成的?

编辑

 //called when pushing esc
 private void ShowSettingsMenu()
 {
    SettingsMenu.IsOpen = true;
 }

//clicking my button, subsequent presses on my esc, doesnt pop it up (the code is run)
private void ImportLicenseButton_Click(object sender, RoutedEventArgs e)
{
  SettingsMenu.IsOpen = false; //<- hiding it again

  OpenFileDialog filedialog = new OpenFileDialog();
  filedialog.Filter = "Xml Files|*.xml";
  if ((bool)filedialog.ShowDialog())
  {
      string fileName = "license.xml";
      string destinationFolder = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;
      if (!string.IsNullOrEmpty(filedialog.FileName))
      {
         File.Copy(filedialog.FileName, System.IO.Path.Combine(destinationFolder, fileName), true);
      }
      else
      {
         MessageBox.Show("Please select a file name");
      }
   }
   this.Cursor = Cursors.None;
}

【问题讨论】:

  • 代码有助于诊断...
  • 是否也将密钥处理程序代码添加到弹出窗口本身?如果不是,那么当打开文件对话框返回时,弹出窗口可能仍然具有焦点(但被隐藏),从而防止击键注册到窗口。弹出窗口与其父控件在单独的窗口中呈现,因此事件可能不会以相同的方式路由。如果没有自动设置,请尝试设置弹出窗口的 Parent 属性。
  • 您在上面所做的关键事情之一是在显示对话框之前隐藏弹出窗口。由于假设对话框将在显示中具有最高的 z 索引,因此总是会吸引人们。

标签: c# wpf popup


【解决方案1】:

通过重新显示弹出窗口进行修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多