#309 – 键盘焦点和逻辑焦点(Keyboard Focus vs. Logical Focus)
来源:互联网 发布:tensorflow cuda9.0 编辑:程序博客网 时间:2024/04/26 19:34
在WPF中,有两种焦点:键盘焦点和逻辑焦点。
如果一个控件获得了键盘焦点,那么该控件就是当前可以获得键盘输入的控件。每个程序只能有一个控件能获得键盘焦点。
如果一个控件获得了逻辑焦点,那么说明该控件获得了当前焦点域(focus scope )内的逻辑焦点。WPF会记录一组或多组控件,每个组被看做是一个焦点域(focus scope )。在每个焦点域内只有一个控件可以获得逻辑焦点。逻辑焦点帮助WPF记住每个组中上一次获得焦点的控件,并在这个组重新变为获得焦点的时候,将键盘焦点返回给组中合适的控件。
获得键盘焦点的控件一定获得了逻辑焦点,获得了逻辑焦点的控件不一定获得了键盘焦点。
原文地址:https://wpf.2000things.com/2011/05/27/309-keyboard-focus-vs-logical-focus/
*************************************************译者注*****************************************************
关于焦点域(focus scope )可以举个例子:比如一个Panel里面有若干个CheckBox,这些CheckBox可以认为构成了一个焦点域,当鼠标选中某个CheckBox的时候,这个CheckBox获得了键盘焦点和逻辑焦点。当鼠标移出这个Panel并且选中了外面的某个可以获得键盘焦点的控件的时候,之前获得键盘焦点的CheckBox就失去了键盘焦点,但是仍然保留着逻辑焦点。可以理解为WPF记住了这个组中,上一次获得键盘焦点的是这个CheckBox。如果再次将鼠标移动到Panel里面,并使Panel获得焦点(不点击任何CheckBox),那么这个时候当前组中获得逻辑焦点的CheckBox会再次获得键盘输入焦点。
你可以使用Keyboard.Focus 静态方法设置控件获得键盘焦点,使用FocusManager.SetFocusedElement 静态方法使控件获得逻辑焦点。(System.Windows.Input 命名空间中)
当然,你也可以使用控件自身(UIElement )的Focus 方法给控件自身设置焦点。它和Keyboard.Focus 静态方法的区别是:Keyboard.Focus 静态方法仅仅只设置键盘焦点。而UIElement 的Focus 方法会尝试将键盘焦点设置给控件,如果控件获取键盘焦点失败,则将逻辑焦点设置给控件。
- #309 – 键盘焦点和逻辑焦点(Keyboard Focus vs. Logical Focus)
- 键盘焦点和逻辑焦点(Logic Focus与Keyboard Focus )
- Focus 焦点定位
- flash ,focus焦点图。
- Focus获得焦点
- 表单焦点: focus/blur
- #308 – 获得当前拥有键盘输入焦点的控件(Checking to See Which Control Has Keyboard Focus)
- 获取焦点(focus函数不起作用)
- 音频焦点 (audio focus)(二)
- 音频焦点 (audio focus)(二)
- focus()获取焦点和blur()失去焦点事件
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- Qt获得焦点和失去焦点处理事件 (Focus事件)
- focus,关注你的焦点
- jQuery dialog设置focus焦点
- 64 位系统 vs2013 配置 OpenCV-3.1.0
- 计算百度地图2点间的距离
- 基于jquery 和 FormData 最简单图片异步上传
- qt XML中的HTML节点,转换为html格式的字符串
- java反射之Field
- #309 – 键盘焦点和逻辑焦点(Keyboard Focus vs. Logical Focus)
- iOS --文字广告轮播
- 架构
- Hadoop 2.6.0-cdh5.4.0集群环境搭建和Apache-Hive、Sqoop的安装
- go读取ini文件配置
- 详解Android/IOS平台下抓包工具使用以及抓取API接口
- Less变量详解
- web app遇到的一些坑及小技能(持续更新...) 遇到的一些坑
- 从开发者的角度剖析微信小程序