У меня есть небольшая форма DataForm, и я хочу сосредоточить внимание на первом TextBox. Я использую инструментарий Novermber 2009 Toolkit. Я назвал TextBox и попытался использовать .Focus () из загруженного события DataForm. Я вижу, что он фокусируется на одном мигании курсора, а затем исчезает. Я пытаюсь разобраться, является ли это артефактом DataForm или чего-то еще. Кто-нибудь знает, смогу ли я это сделать?
Как передать фокус TextBox в DataForm?
comment
Вы когда-нибудь находили для этого решение?
- person Myles J   schedule 24.01.2011
comment
У меня точно такая же проблема. На странице проекта codeplex возникла проблема: silverlight.codeplex.com/workitem/8365
- person Olivier Payen   schedule 17.02.2011
Ответы (3)
Небольшой трюк, который я успешно использовал, - это подписаться на событие Loaded текстового поля, а затем в обработчике событий я установил фокус с помощью такого кода:
private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
TextBox usernameBox = (TextBox)sender;
Dispatcher.BeginInvoke(() => { usernameBox.Focus(); });
}
person
witters
schedule
21.12.2010
Я пробовал множество предложений, например. используя Dispatcher, UpdateLayout и т. д., плавающие на различных интернет-сайтах, и ни один из них не работал у меня надежно. В итоге остановился на следующем:
частный 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;
}
}
}
Не очень хорошо, я знаю ... но это работает. Похоже, есть проблема с синхронизацией с использованием метода Focus () в SL4.
person
Myles J
schedule
24.01.2011
Это сработало для меня. Ключ состоит в том, чтобы установить фокус на правильный TextBox в событии GotFocus.
- person Steve Wranovsky; 26.10.2011
Попробуйте вызвать мою функцию настройки пользовательского фокуса (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;
}
}
Это должно сработать для вас.
Джим МакКарди
person
Jim McCurdy
schedule
12.01.2010
Спасибо за предложение. Я пробовал, но это не помогло: получаю те же результаты. TextBox ненадолго фокусируется, а затем теряет его. Если я закомментирую .Focus () или, используя ваш код, оператор .FocusEx (), он вообще не получит фокуса, поэтому я знаю, что они работают с самого начала. Должно быть, это что-то еще ворует, но я не знаю, как понять, что это такое.
- person serialhobbyist; 13.01.2010