我搜索了SO,得到了适用于各个表单的以下代码。
this.KeyDown += new KeyEventHandler(HandleEsc);
private void HandleEsc(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
this.Close();
}
}
问题是,我必须对应用程序中的每个WPF表单进行相同的编码。我正在寻找一种方法,把它放在主题风格中,这样我就可以避免重复编码。有办法做到这一点吗?
谢谢,
我不认为使用样式可以做到这一点。不过,您可以做的是在Window和Window
类之间创建一个新层,并让该中间层负责处理Escape键。要做到这一点,首先创建一个名为EscapeWindow
的新类,并让它从Window
继承,如下所示:
namespace WpfApplication1
{
public class EscapeWindow : Window
{
public EscapeWindow()
: base()
{
this.KeyDown += new KeyEventHandler(HandleEsc);
}
private void HandleEsc(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape) { this.Close(); }
}
}
}
现在,每次创建新窗口时,都可以让它从EscapeWindow
而不是Window
继承。例如,你的MainWindow
看起来像这样:
public partial class MainWindow : EscapeWindow
{
public MainWindow()
{
InitializeComponent();
}
}
请注意,由于WPF-Windows是在XAML中部分定义的,因此您还需要更改该部分实现。在这种情况下,MainWindow.xaml
看起来是这样的:
<local:EscapeWindow x:Class="WpfApplication1.MainWindow"
xmlns:local="clr-namespace:WpfApplication1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
</Grid>
</local:EscapeWindow>
这可能不一定会让您的生活更轻松,因为每次创建Window
时都需要更改引用,但它为一般处理Escape
按钮提供了一个干净的框架。