我有一个小的 DataForm,我想将焦点放在第一个 TextBox 上。我正在使用 2009 年 11 月的工具包。我已经命名了 TextBox 并尝试使用 DataForm 的加载事件中的 .Focus() 。我看到它获得一个光标“闪烁”的焦点,然后它就消失了。我正在尝试确定这是 DataForm 的人工制品还是其他东西。有谁知道我是否应该能够做到这一点?
问问题
1917 次
3 回答
1
我成功使用的一个小技巧是订阅文本框的 Loaded 事件,然后在事件处理程序中,我使用如下代码设置焦点:
private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
TextBox usernameBox = (TextBox)sender;
Dispatcher.BeginInvoke(() => { usernameBox.Focus(); });
}
于 2010-12-21T14:22:39.820 回答
1
我尝试了很多建议,例如使用 Dispatcher、UpdateLayout 等在各种互联网站点上漂浮,但没有一个对我来说可靠。最后我确定了以下几点:
私人布尔_firstTime =真;
private void MyChildWindow_GotFocus(object sender, RoutedEventArgs e)
{
if (_firstTime)
{
try
{
var dataForm = MyDataForm;
var defaultFocus = dataForm.FindNameInContent("Description") as TextBox;
defaultFocus.Focus();
}
catch (Exception)
{
}
finally
{
_firstTime = false;
}
}
}
我知道不漂亮......但它的工作原理。在 SL4 中使用 Focus() 方法似乎存在时间问题。
于 2011-01-24T13:55:22.770 回答
0
尝试调用我的自定义焦点设置函数 (FocusEx)。
internal static class ControlExt
{
// Extension for Control
internal static bool FocusEx(this Control control)
{
if (control == null)
return false;
bool success = false;
if (control == FocusManager.GetFocusedElement())
success = true;
else
{
// To get Focus() to work properly, call UpdateLayout() immediately before
control.UpdateLayout();
success = control.Focus();
}
ListBox listBox = control as ListBox;
if (listBox != null)
{
if (listBox.SelectedIndex < 0 && listBox.Items.Count > 0)
listBox.SelectedIndex = 0;
}
return success;
}
}
那应该对你有用。
吉姆·麦柯迪
于 2010-01-12T23:24:58.757 回答