c# - 当按钮获得焦点时,WPF阻止执行命令
问题描述
我有带有文本框和按钮的应用程序。当我在文本框中单击 ENTER 时,我想将焦点设置在按钮上(使用遍历),但是当按钮获得焦点时,执行命令。当按钮获得焦点时,我不想执行命令。这是我的代码:
View1.xaml
<TextBox PreviewKeyDown="UIElement_OnPreviewKeyDown"/>
View1.xaml.cs
private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Return) return;
TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next);
UIElement keyboardFocus = Keyboard.FocusedElement as UIElement;
keyboardFocus?.MoveFocus(tRequest);
}
View2.xaml
<Button Content="Testbutton" Command="{Binding TestCommand}"/>
View2Vm
class View2Vm : BaseVm
{
public RelayCommand TestCommand { get; set; }
public View2Vm()
=> TestCommand = new RelayCommand(x => { MessageBox.Show("Message"); });
}
如何在不执行命令的情况下将焦点设置在按钮上?谢谢
解决方案
设置焦点时仍启用 KeyDown 事件。解决方案是:
private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Return) return;
TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next);
UIElement keyboardFocus = Keyboard.FocusedElement as UIElement;
keyboardFocus?.MoveFocus(tRequest);
e.Handled = true;
}
推荐阅读
- javascript - 使用 Angular 6 和 Billboard.js 图表库出现构建错误
- python - 通过反转图像的宽度和长度来顺时针旋转图像不起作用
- excel - 从数据透视表中的 PivotCell 获取 ParentNodeName
- python - 无法从 http://automatetheboringstuff.com/appendixa/ 安装第三方模块
- reactjs - AWS Amplify federatedSignIn 错误:无法读取未定义的属性“_config”
- python - 嗨,一直在研究 geopy,但我遇到了这个“关键错误“组””,我找不到解决方案,我是新手,所以请帮忙
- ios - <_TtGCs26_SwiftDeferredNSDictionarySSP__$ 0x281131d70> setValue:forUndefinedKey:]:此类不符合键状态的键值编码。
- extjs6 - 显示搜索结果时 Ext js 版本 6 中的性能问题
- linux - .NET Core 和 Kestrel - 部署在 Linux 上的 ASP.NET CORE Web api 应用程序的反向代理 Web 服务器应该是什么?
- javascript - 如何正确地将 base64 编码文档从 express 发送到客户端并启动下载?