在 WPF 中按 Enter 键移动到下一个控件

2023-12-27

我想在 WPF MVVM 应用程序中按 Enter 键而不是 Tab 键时移动到下一个控件。我怎样才能实现这个目标?


下面是我为此使用的附加属性。

首先,示例用法:

<TextBox Width="100"
         Text="{Binding Name, Mode=TwoWay}"
         UI:FocusAdvancement.AdvancesByEnterKey="True" />

(UI 是我定义以下内容的名称空间别名。)

附属财产:

public static class FocusAdvancement
{
    public static bool GetAdvancesByEnterKey(DependencyObject obj)
    {
        return (bool)obj.GetValue(AdvancesByEnterKeyProperty);
    }

    public static void SetAdvancesByEnterKey(DependencyObject obj, bool value)
    {
        obj.SetValue(AdvancesByEnterKeyProperty, value);
    }

    public static readonly DependencyProperty AdvancesByEnterKeyProperty =
        DependencyProperty.RegisterAttached("AdvancesByEnterKey", typeof(bool), typeof(FocusAdvancement), 
        new UIPropertyMetadata(OnAdvancesByEnterKeyPropertyChanged));

    static void OnAdvancesByEnterKeyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var element = d as UIElement;
        if(element == null) return;

        if ((bool)e.NewValue) element.KeyDown += Keydown;
        else element.KeyDown -= Keydown;
    }

    static void Keydown(object sender, KeyEventArgs e)
    {
        if(!e.Key.Equals(Key.Enter)) return;

        var element = sender as UIElement;
        if(element != null) element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
    }
}

您还说了“而不是制表符”,所以我想知道您是否想禁止以通常的方式使用制表符。我建议不要这样做,因为这是一个常见的、众所周知的范例,但如果是这样的话,你可以添加一个PreviewKeyDown附加属性中的处理程序,检查 Tab 键,然后设置Handled = true对于事件参数。

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

在 WPF 中按 Enter 键移动到下一个控件 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 如何在 igraph R 中的图组件之间添加边

    我有一个图表包含4 components 现在 我想在其中添加一个优势all components基于size of the membership 例如 下图包含4 components 首先 我将连接all components with
  • AngularJS - 原始/肮脏和触摸/未触摸之间的区别

    AngularJS 开发人员指南 表单 https docs angularjs org guide forms列出了许多有关表单和字段的样式和指令 对于每一个 都有一个 CSS 类 ng valid ng invalid ng prist
  • 创建 DPI 感知应用程序

    我有一个 C 表单应用程序 当我更改显示器的 DPI 时 所有控件都会移动 我用了代码this AutoScaleMode AutoScaleMode Dpi 但这并没有回避问题 有人有想法吗 编辑 从 NET 4 7 开始 Windows
  • 为什么需要设置 DefaultForbidScheme

    在 WebAPI net 核心项目中 我创建了一个验证 api 密钥的中间件类 通过验证它 它会检索该密钥在调用方法中拥有的权限 用户或管理员 我通过一个开关来设置原理 就像这样 GenericIdentity identity new G
  • 在 Haskell 中循环时

    如何在 Haskell 中编写以下伪代码 x 0 for i from 0 to 100 j 0 while f i j gt 0 x f i j j 1 f一些不重要的功能 我想出了这样的事情 a x i lt 0 100 let s t
  • 如何调整直接从 R 脚本渲染的 pdf 中的图形大小?

    我从一些地方读到 直接从 R 脚本渲染的 pdf 的图形大小可以设置为knitr opts chunk 我想从包含多个图形的 R 脚本制作一个 pdf 文件 并尝试使用以下命令调整图形大小opts chunk 然而 这并没有奏效 下面是一个
  • 委托在 Objective-C 中如何工作?

    有谁知道我在哪里可以找到有关应用程序委托的内容和工作方式的良好解释 教程objective C 我手头的两本书没有详述delegates足够了 并且没有很好地解释它们 让我真正理解它们的力量和功能 如有疑问 请检查docs https de
  • 并发和协调运行时 (CCR) 学习资源

    我最近正在学习它的内部和外部并发和协调运行时 CCR http msdn microsoft com en us library bb905450 aspx为这项相对较新的技术寻找良好的学习资源非常困难 谷歌快速搜索后 Creedence
  • 如何在cmake中打印所有编译选项

    我的项目使用 cmake 一些编译选项是通过配置的set set CMAKE CXX FLAGS DEBUG g set CMAKE CXX FLAGS DEBUG CMAKE CXX FLAGS DEBUG O0 set CMAKE CX
  • UIGestureRecognizer 用于 UIView 的一部分

    我在 iOS 应用程序中使用 UIGestureRecognizer 但遇到了一些问题 我只希望手势在视图的某个区域起作用 因此我使用特定框架创建了一个新的 UIView 并将其添加到根视图中 手势工作正常 但现在唯一的问题是我无法单击新视
  • 如何使用 RSACryptoServiceProvider 解密加密文本?

    我已使用 RSACryptoServiceProvider 加密了文本 我导出了公钥和私钥 显然我只是想在解码器应用程序中公开公钥 所以我编写了如下代码 private const string PublicKey
  • 表单“onsubmit”没有被调用

    这是我的表格的一部分
  • 检查目录是否是符号链接?

    In os有一个函数os path islink PATH 它检查是否PATH是符号链接 但是如果当 PATH 是某个目录的符号链接时失败 相反 python 认为它是目录 os path isdir PATH 那么如何检查目录是否是链接呢
  • ConcurrentBag 实现中是否存在内存泄漏? [复制]

    这个问题在这里已经有答案了 可能的重复 ConcurrentBag 中可能存在内存泄漏吗 https stackoverflow com questions 5353164 possible memoryleak in concurrent
  • 如何在 Android 中发布图片

    我有这个表单 用于使用 HttpPost 将图像上传到服务器 我使用 HTML 表单完成了此操作 但它不适用于 Android 的 HttpPost 它回复 您没有选择要上传的文件 看来文件字段尚未发送
  • 在 iOS 上的广告中发送蓝牙 LE 数据

    我的应用程序作为蓝牙 LE 外围设备运行 我试图在广告中发送几个字节的自定义数据 func btStartBroadcasting peripheral CBPeripheralManager create an array of byte
  • 词形还原与词干提取之间有什么区别?

    我什么时候使用每个 另外 NLTK 词形还原是否依赖于词性 如果是的话不是更准确吗 短而密 http nlp stanford edu IR book html htmledition stemming and lemmatization
  • AOP::0 处错误,在两种不同方法上应用 aop 的绑定不一致

    我正在尝试在两个不同路径中的两种不同方法上应用 before 方面 class Service1 public Object applyX X x code class Service2 public OtherObject applyY
  • 如何控制 ggplot2 中的 bin 间隔?

    我无法正确控制垃圾箱是否来自例如 10 到 10 或从 0 到 20 当我说binwidth 20我得到前者 但我有从 1 开始的数据 我不希望间隔变为负值 这是我的问题的一个例子 testData data frame x c 1 4 6
  • 在 WPF 中按 Enter 键移动到下一个控件

    我想在 WPF MVVM 应用程序中按 Enter 键而不是 Tab 键时移动到下一个控件 我怎样才能实现这个目标 下面是我为此使用的附加属性 首先 示例用法