WPF 复合控件焦点设置

WPF 复合控件焦点设置,第1张

定义一个密码框的复合控件,最外层是 Border, 内部有三个控件分别是 Image, GridSplitter, PasswordBox.

当键盘输入完账号通过 tab 键跳转到密码框,会发现焦点不在 PasswordBox 上而是跑到了 GridSplitter 上,并有虚框。那为什么 Image 没有获取到焦点呢?

查询 MSDN 资料发现有一个依赖项属性 Focusable, 设置它为 true 代表此控件允许获取焦点,false 代表此控件不允许获取焦点。而 Image 控件默认是 false, 因此在 XMAL 文件中将 GridSplitter 的 Focusable 属性设置为 false 就好了。

<GridSplitter Focusable = "False" />

设置焦点 :以下语句添加在OnInitDialog()函数中

GetDlgItem(ID)->SetFocus()  ID 为控件ID

快捷键在 PreTranslateMessage(MSG* pMsg)函数中设定

至于按TAB 键没反应  检查控件属性设定时 Tab Stop 项是否选中 须选中.

我们常常会有这样的需求,想在窗口打开的时候就将焦点(光标)设置到某个指定的控件上去。

我们都知道设置焦点需要用到setFocus这个方法(几乎任何编程环境都这样VC,C#,VB,VF都这样)。

但在VC中我们使用了GetDlgItem(IDC_XX)->SetFocus()并不一定会达到我们需要的效果。

如果我们仅仅设置了SetFocus()那是不够的,我们还需要将对话框中的OnInitDialog的最后那句return设置为"FALSE"

我曾经在对话框中对各个控件的输入进行校验检测,当检测到不满足要求的输入则会d出对话框提示。

我本来的目的是d出提示框,但确定后回到窗体中后就将焦点和光标设置到对应的控件上,结果死都上不去。

一开始我以为是Setfocus的设置无效,后面发现是逻辑上错了,因为当提示框显示的时候,在提示框d出前通过SetFocus设置的焦点都将作废。

发现这一点后,我将d出提示框前需要设置获得焦点的目标控件存储起来,等提示框显示完了我仍然可以对该控件进行设置焦点的 *** 作,问题总算解决了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7758471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存