【发布时间】:2016-06-14 07:53:31
【问题描述】:
我正在使用 C#.net 在 WPF 应用程序中工作 我想知道,有什么方法可以禁用特定 xaml 页面上的 Backspace 按钮。 我想阻止用户在这个特定的 xaml 页面上使用 Backspace 按钮。即使用户按下 Backspace 按钮,也不会有任何效果。
谢谢
【问题讨论】:
标签: wpf
我正在使用 C#.net 在 WPF 应用程序中工作 我想知道,有什么方法可以禁用特定 xaml 页面上的 Backspace 按钮。 我想阻止用户在这个特定的 xaml 页面上使用 Backspace 按钮。即使用户按下 Backspace 按钮,也不会有任何效果。
谢谢
【问题讨论】:
标签: wpf
如果您想防止退格返回 WPF 框架中的导航历史记录,包括特殊的“后退”硬件按钮,请使用:
NavigationCommands.BrowseBack.InputGestures.Clear();
NavigationCommands.BrowseForward.InputGestures.Clear();
【讨论】:
NavigationWindow构造函数中。
您需要捕获 onKeyDown 事件并将退格设置为 true。
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Back)
{
e.Handled = true;
}
}
【讨论】:
KeyDown (not PreviewKeyDown) 可以解决问题,另一个解决方案看起来更干净 (NavigationCommands...InputGestures.Clear()) - 但在 XBAP 中对我不起作用。
OnKeyDown 方法不起作用,但覆盖 OnPreviewKeyDown 确实有效。
所以我更喜欢approach by sipwiz,因为我不想禁用所有键盘快捷键(我仍然想使用 ALT-Left 等而不是 Backspace)。
对于使用 WPF NavigationWindow 的我来说,覆盖 OnKeyDown 方法根本不起作用,当我按下 Backspace 键时,窗口仍然导航回来。覆盖OnPreviewKeyDown 似乎开始工作,但是当我需要退格键来处理文本框时,我遇到了问题。
所以我从approach by Ed Andersen 中学到了什么,并将以下代码添加到我的 NavigationWindow 构造函数中:
KeyGesture backKeyGesture = null;
foreach(var gesture in NavigationCommands.BrowseBack.InputGestures)
{
KeyGesture keyGesture = gesture as KeyGesture;
if((keyGesture != null) &&
(keyGesture.Key == Key.Back) &&
(keyGesture.Modifiers == ModifierKeys.None))
{
backKeyGesture = keyGesture;
}
}
if (backKeyGesture != null)
{
NavigationCommands.BrowseBack.InputGestures.Remove(backKeyGesture);
}
【讨论】: