4

작은 DataForm이 있는데 첫 번째 TextBox에 포커스를 설정하려고합니다. 저는 Novermber 2009 Toolkit을 사용하고 있습니다. TextBox의 이름을 지정하고 DataForm의로드 된 이벤트에서 .Focus()를 사용하여 시도했습니다. 나는 그것이 한 커서 '깜박'에 대한 초점을 얻은 다음 사라 졌다고 봅니다. 이것이 DataForm 또는 다른 것의 인공물 인 경우 해결하려고합니다. 내가 이것을 할 수 있어야하는지 아는 사람 있습니까?DataForm의 TextBox에 포커스를 지정하려면 어떻게합니까?

+1

해결 방법을 찾으셨습니까? –

+0

나는 똑같은 문제가있다. codeplex 프로젝트 페이지에 문제가 작성되었습니다. http://silverlight.codeplex.com/workitem/8365 –

답변

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; 
    } 
} 

그게 효과가 있습니다. 나는 성공적으로 사용했던 약간의 트릭이 텍스트 상자의로드 이벤트에 가입하는 것입니다

YinYangMoney

+0

제안 해 주셔서 감사합니다. 나는 그것을 시도했지만 도움이되지 않았다 : 나는 같은 결과를 얻는다. TextBox가 잠깐 동안 포커스를 잃어 버렸습니다. .Focus() 또는 코드를 사용하여 .FocusEx() 문을 주석으로 처리하면 포커스가 전혀 나타나지 않으므로 처음부터 작업하고 있음을 알 수 있습니다. 뭔가 다른 것을 훔치려는 것이 분명하지만 나는 그것이 무엇인지 알아내는 방법을 모른다. – serialhobbyist

1

은 다음 이벤트 처리기에서, 나는 이와 같은 코드로 포커스를 설정 짐 맥 커디

:

private void TextBox_Loaded(object sender, RoutedEventArgs e) 
{ 
      TextBox usernameBox = (TextBox)sender; 
      Dispatcher.BeginInvoke(() => { usernameBox.Focus(); }); 
} 
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() 메서드를 사용할 때 타이밍 문제가있는 것으로 보입니다.

+0

이것은 나를 위해 일했습니다. 핵심은 GotFocus 이벤트의 올바른 TextBox에 포커스를 설정하는 것입니다. –

관련 문제