2017-04-04 3 views
0

Selecting All 내용이 TextBox 내부에있는 문제가 있습니다.TextBox의 모든 내용 선택이 WPF에서 예상대로 작동하지 않습니다

, 내 그리드에서 서로 아래 6-7 텍스트 상자 같은이 있기 때문에 Ussually 눌러

, 나는 또 다른 하나의 텍스트 상자에서 점프하고있어 입력하고 눌러 내가 하나에서 다른 점프 할 필요가 입력

private void Grid_PreviewKeyDown_1(object sender, KeyEventArgs e) 
    { 

    if (e.Key == Key.Enter) 
    { 

     UIElement element = e.Source as UIElement; 
     element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 

     //TextBox tb = (sender as TextBox); 
     //if (tb != null) 
     //{ 
     // tb.SelectAll(); 
     //} 

    } 
    } 

그리고 나는이 같은 몇 가지 계산을하고 있어요 Enter 키를 누릅니다 때 그들 중 일부에있어 동안 : 나는 서로 이동할 때 내가 계산을 완료 할 때 (:

private void txt2_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
     { 
      try 
      { 
       CalculateSomethingFromOtherTextBoxes(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
} 

내 질문 옆을 Enter 키를 누름), 다음 TextBox로 이동합니다. TextBox의 내용 중 SELECTALL을 사용하고 싶습니다. 일부 값 또는 다른 값을 편집하고 싶을 때 가끔 혼란스러운 내용 인 insidee가 선택되고 때로는 그렇지 않습니다.

나는 텍스트 상자의 각 설정 GotFocus 이벤트를 시도하고 그것은 다음과 같습니다

private void txt3_GotFocus(object sender, RoutedEventArgs e) 
{ 
    txt3.SelectAll(); 
} 

그러나 불행하게도 어떻게 든이 가끔 가끔 작동하고 그것은, 내가 모든 콘텐츠 때때로을 선택하고 때때로 의미하지 않습니다 하지 ..

고마워 건배

+0

이 솔루션과 같은 동작은 어떻습니까? http://stackoverflow.com/a/1264633/503059 – Staeff

답변

1

GotFocus 이벤트 대신 GotKeyboardFocus 이벤트를 처리하도록하십시오. 이게 작동해야합니다 :

private void txt3_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    txt3.SelectAll(); 
} 
0

는 TextBlock 또는 텍스트 상자의 모든 텍스트를 선택하도록 설정할 수있는 속성이 없습니다. 모든 텍스트를 선택하려면 TextBoxBase.SelectAll 메서드를 사용해야합니다. 스타일에서 할 수있는 것은 핸들러 코드가 SelectAll을 호출하는 GotFocus 이벤트에 대한 이벤트 핸들러를 설정하는 것이지만 처리기는 물론 XAML이 아닌 코드에 있어야합니다.

TextBox에 포커스가있을 때마다 텍스트를 선택하는 첨부 된 속성을 만들 수도 있지만 XAML에서는이 작업을 수행 할 수 없습니다.

+0

그리고 내 개인 무효 txt2_PreviewKeyDown에 finally 블록을 추가하는 것에 대해 어떻게 생각하니 거기서 수동으로 이렇게 할 수 있습니다 : txt3.SelectAll(); // 다음 컨트롤을 선택하십시오. –

+0

텍스트 상자를 이동하지 않고 현재와 동일한 순서로 유지하면 괜찮습니다. 그렇지 않으면 나중에 코드를 다시 작성해야합니다. –