我有一个小的DataForm,我想把焦点放在第一个TextBox上。我正在使用Novermber 2009 Toolkit。我已经命名了TextBox并尝试使用DataForm加载的事件中的.Focus()。我看到它会聚焦一个光标'闪烁',然后就消失了。我试图弄清楚,如果这是DataForm或其他东西的人工制品。有谁知道我是否应该这样做?
答案 0 :(得分:1)
我成功使用的一个小技巧是订阅文本框的Loaded事件,然后在事件处理程序中,我使用以下代码设置焦点:
private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
TextBox usernameBox = (TextBox)sender;
Dispatcher.BeginInvoke(() => { usernameBox.Focus(); });
}
答案 1 :(得分:1)
我尝试过很多建议,例如使用Dispatcher,UpdateLayout等等在各种互联网网站上漂浮,并且没有一个可靠地为我工作。最后我决定了以下几点:
private bool _firstTime = true;
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()方法似乎存在时间问题。
答案 2 :(得分: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;
}
}
那应该适合你。
Jim McCurdy