WPF中的事件、命令、焦点管理与高级数据绑定
1. 焦点管理
在应用程序中,焦点的主要作用是处理键盘输入,借助各种组合键来实现对控件的导航与交互操作。在WPF里,可通过Tab键及其变体(如Ctrl + Tab、Shift + Tab、Ctrl + Shift + Tab)以及鼠标点击来管理焦点。
1.1 逻辑焦点与键盘焦点
WPF的焦点管理分为逻辑焦点和键盘焦点两种。
-键盘焦点:相对容易理解,拥有键盘焦点的元素会接收应用程序中的所有键盘输入。在整个桌面上,同一时刻只有一个元素能拥有键盘焦点。UIElement若要获得键盘焦点,其Focusable和IsVisible属性必须设置为true。可以通过调用UIElement的Focus()方法或使用静态的Keyboard.Focus()方法来设置焦点。拥有键盘焦点的元素,其IsFocused、IsKeyboardFocused和IsKeyboardFocusWithin属性会被设为true,这些属性可与触发器结合使用,以直观显示元素的焦点状态。Keyboard.FocusedElement指向最后获得焦点的元素,建议在包含控件的Loaded事件处理程序中设置键盘焦点。
-逻辑焦点:在了解逻辑焦点之前,需先明白焦点范围的概念。焦点范围是一个容器,用于跟踪拥有逻辑焦点的元素。在一个焦点范围内,同一时刻只有一个元素能拥有逻辑焦点。应用程序中可以存在多个焦点范围,WPF默认提供了Window、Menu、ContextMenu和ToolBar这些焦点范围。通过FocusManager.FocusedElement可以获取给定焦点范围内拥