【发布时间】: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 索引,因此总是会吸引人们。