我可以使用箭头键而不是 Tab 导航进出 wpf 组合框吗?

2024-02-26

我有 wpf UserControl,其中包含一个组合框和一个连续的文本框。目前,在组件之间移动的唯一方法是在它们之间切换,但我希望还能够使用左右箭头键从组合框切换到文本框。

这并不像在 keyup 事件上使用事件处理程序那么简单。

void ComboKeyUp( object sender, KeyEventArgs e )
{
    if( e.Key == Key.Right)
    {
        e.Handled = true;
        textbox.Focus();
    }
}

...因为尽管事件被报告为已处理,但组合仍会更改值。

有没有办法做到这一点,同时不会破坏组合框中项目的向上/向下选择?


我创建了带有文本框的组合框:

<ComboBox Width="100" Height="25"  PreviewKeyDown="ComboboxPreviewKeyDown">
  <ComboBox.Items> 
    <TextBox Text="Item 1"/>
    <TextBox Text="Item 2"/>
    <TextBox Text="Item 3"/>
  </ComboBox.Items>
</ComboBox>

然后添加处理程序:

    private void ComboboxPreviewKeyDown(object sender, KeyEventArgs e)
    {
        Action<FocusNavigationDirection> moveFocus = focusDirection => {
            e.Handled = true;
            var request = new TraversalRequest(focusDirection);        
            var focusedElement = Keyboard.FocusedElement as UIElement;
            if (focusedElement != null)
                focusedElement.MoveFocus(request);
        };

        if (e.Key == Key.Down)
            moveFocus(FocusNavigationDirection.Next);
        else if (e.Key == Key.Up)
            moveFocus(FocusNavigationDirection.Previous); 
    }

现在“向上”和“向下”按钮的行为与“Tab”和“Shift+Tab”相同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用箭头键而不是 Tab 导航进出 wpf 组合框吗? 的相关文章

随机推荐

  • ExoPlayer:如何播放http直播?

    我想在我的 Android 应用程序中使用 ExoPlayer 库来播放实时流媒体视频 我浏览了 exoplayer 网站和文档以及 Github 页面 但我对解释不满意 任何人都可以给我提示如何通过 ExoPlayer 播放 http 直
  • Vue 3 - 从插槽内的子组件发出事件

    我正在考虑升级到 v3 但很失望地看到内联模板已被删除 因此 我尝试转换为使用作用域插槽 我定义了以下列表组件
  • 在 Windows 上的 Excel VBA 中,如何获取字符串化的 JSON 表示形式而不是解析的 JSON 变量的“[object Object]”?

    在这里回答我自己的问题 我已经在 Excel VBA 中使用 JSON 做了一些工作 并发布了很多发现 我将以问答的形式进行https stackoverflow com help self answer https stackoverfl
  • 如何限制quartz调度程序中特定类并发执行的作业实例的数量?

    我有一个实现 Job 的 Applier 类 意味着 Applier 类是 Quartz Job 的实例之一 我的要求是控制一次执行的 Applier 实例的数量 意味着我想限制一次最多执行 5 个 Applier 实例 如果 Applie
  • 谁能推荐一个像样的Python FOSS PDF 生成器?

    我需要一个基本的 pdf 生成器 它可以让我将一些图像和文本放入 pdf 文件中 拥有一些基本绘图命令 线条等 的能力也将是一个优势 我确实读过这个问题 https stackoverflow com questions 177799 wh
  • 学说动态创建实体

    有没有办法创建和modify动态数据库中的实体和表 来自 php 脚本 例如 我想从数组生成一个实体 fields id integer name string and so on 然后在bd中生成一个表 我只知道一种简单的解决方案 创建
  • 了解 C 运行时环境 (ARM) - 从哪里开始

    我是一名嵌入式开发人员 主要使用 ARM Cortex M 设备 最近 我切换到 Linux 并决定了解更多有关构建 组装 链接过程 如何编写 makefile 等的信息 因为我使用的是 IDE IAR Keil Eclipse 等 其中很
  • jquery this 与 $(this) 甚至 $this

    我经常看到使用关键字的例子this在 jquery 有时我看到它与 和括号一起使用 有时则不使用 我想我看到它与每种都使用了一点 So var id this attr id var id this attr id var id this
  • 发送 XML 字符串作为响应

    我正在从第三方应用程序 不同域 向我的 ASP 应用程序获取请求 我正在处理请求并在我的应用程序中执行业务部分 作为确认 我需要将 XML 字符串作为响应发送到将请求发布到我的应用程序的同一页面 我使用以下代码成功检索了 Request 中
  • Swift 3:popToViewController 不工作

    在我的应用程序中 我有三个表视图控制器 然后可能有许多 UIViewController 如果用户在任何时候按回 每个 UIViewController 都必须返回到第一个表视图控制器 我不希望用户必须返回可能有数百页的页面 这就是我有趣的
  • 与“git push --mirror”相反?我如何取回我的回购协议?

    我取得了巨大的成功git push mirror将备份副本复制到裸存储库 但是在搜索 SO 和其他地方之后 我找不到一种在本地克隆该东西的方法所有分支机构 我不想使用git clone因为我不想让我的本地仓库知道裸仓库 如果我使用git p
  • vb.net 事件声明 - 添加非序列化属性

    我正在将 vb net 程序集添加到现有的 C 应用程序 我的所有 vb net 类型都继承自
  • 执行SQLCommand(Select)查询后命名DataSet.table

    在存储过程 MS SQL 中我的查询是 SELECT FROM ContentReportRequests a UserPreferences d WHERE a UserID d UserID and a ID ID 我想给结果表起一个名
  • Http 获取响应更新 HTML,但在控制台中给出未定义的错误

    当我更新我的html与响应 Obj 使用Http客户端它更新了值但给出了多个错误 文件名 auth service ts import any from codelyzer util function import Injectable f
  • C 与 vDSP 与 NEON - NEON 怎么会像 C 一样慢?

    NEON 怎么会像 C 一样慢呢 我一直在尝试构建一个快速直方图函数 通过为传入值分配一个值 这是它们最接近的范围阈值 将它们分入范围 这是应用于图像的东西 因此它必须很快 假设图像数组为 640x480 因此有 300 000 个元素 直
  • 如何让我的 Android 应用程序填满 Honeycomb 上的屏幕?

    我周三刚得到一个 Xoom 在将我的应用程序加载到上面后 它们在一个小窗口中运行 就像在较小的设备上运行一样 各种其他应用程序填满了 Xoom 的屏幕 尽管它们似乎没有使用任何特定的蜂窝 API 因为它们似乎与我在手机上获得的 UI 相同
  • 确定关闭正在关闭我的应用程序

    NET 中是否可以确定我的应用程序是否由于 Windows 收到关闭命令 而不是任何旧的应用程序关闭 而关闭 以便写出一些临时缓存文件 甚至阻止关闭足够长的时间以提示用户输入 虽然我当前的范围涉及 Winform 应用程序和 Windows
  • 尝试使用节点安装 graphql 包[重复]

    这个问题在这里已经有答案了 npm ERR code ENOSELF npm ERR Refusing to install package with name graphql under a package npm ERR also ca
  • Jenkins下的SignTool找不到与USB Token匹配的证书

    我想构建 WPF 应用程序并对其进行代码签名 并使用 Jenkins 使用 ClickOnce 进行部署 我的设置是 Jenkins 最新版本 运行管理员 USB 令牌上的证书 在 SafeNet 客户端中激活单点登录 https xrst
  • 我可以使用箭头键而不是 Tab 导航进出 wpf 组合框吗?

    我有 wpf UserControl 其中包含一个组合框和一个连续的文本框 目前 在组件之间移动的唯一方法是在它们之间切换 但我希望还能够使用左右箭头键从组合框切换到文本框 这并不像在 keyup 事件上使用事件处理程序那么简单 void