设置 WPF 的初始焦点






4.95/5 (13投票s)
展示如何在 XAML 中设置初始焦点。
在 WPF 对话框中,我经常看到如下代码示例:
private void OnLoaded(object sender, EventArgs e)
{
this._textSearch.Focus();
}
这通常伴随着如下 XAML 示例:
<Window ...
Loaded="OnLoaded">
有时,我也看到事件在构造函数中设置。出于某种原因,这真的让我感到不舒服。我更喜欢在 XAML 中定义事件处理程序。我不太确定我的反对意见是什么;我只是更喜欢将所有 UI 相关的东西放在一个地方。
这实际上实现的效果(你可能已经想到了),是名为 _textSearch
的控件(在本例中是一个 TextBox)在对话框加载时获得焦点。实际上,WPF 提供了一种更简单的方法来设置初始焦点,即使用 FocusManager。 FocusManager 提供了一组 static
方法、属性和事件,用于确定和设置焦点范围[1]以及设置焦点范围内的焦点元素。
因此,使用 FocusManager,你不需要处理 Loaded 事件并手动调用 Focus 方法,如前面的代码示例所示,你可以简单地将 FocusedElement 设置在 FocusManager 上,如以下代码示例所示:
<Window ...
FocusManager.FocusedElement="{Binding ElementName=_textSearch}">
简单、整洁、一站式完成,无需代码隐藏 :)
[1] 有关焦点范围的更多信息,请参阅 MSDN 网站上的 FocusManager 类。
本作品采用 知识共享署名 3.0 非移植许可协议 授权。