65.9K
CodeProject 正在变化。 阅读更多。
Home

设置 WPF 的初始焦点

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.95/5 (13投票s)

2009 年 4 月 1 日

CC (Attr 3U)

1分钟阅读

viewsIcon

98712

展示如何在 XAML 中设置初始焦点。

在 WPF 对话框中,我经常看到如下代码示例:

private void OnLoaded(object sender, EventArgs e)
{
    this._textSearch.Focus();
}

这通常伴随着如下 XAML 示例:

<Window ...
        Loaded="OnLoaded">

有时,我也看到事件在构造函数中设置。出于某种原因,这真的让我感到不舒服。我更喜欢在 XAML 中定义事件处理程序。我不太确定我的反对意见是什么;我只是更喜欢将所有 UI 相关的东西放在一个地方。

这实际上实现的效果(你可能已经想到了),是名为 _textSearch 的控件(在本例中是一个 TextBox)在对话框加载时获得焦点。实际上,WPF 提供了一种更简单的方法来设置初始焦点,即使用 FocusManagerFocusManager 提供了一组 static 方法、属性和事件,用于确定和设置焦点范围[1]以及设置焦点范围内的焦点元素。

因此,使用 FocusManager,你不需要处理 Loaded 事件并手动调用 Focus 方法,如前面的代码示例所示,你可以简单地将 FocusedElement 设置在 FocusManager 上,如以下代码示例所示:

<Window ...
        FocusManager.FocusedElement="{Binding ElementName=_textSearch}">

简单、整洁、一站式完成,无需代码隐藏 :)

[1] 有关焦点范围的更多信息,请参阅 MSDN 网站上的 FocusManager 类

本作品采用 知识共享署名 3.0 非移植许可协议 授权。

© . All rights reserved.