2011-10-11 2 views
1

나는 Grid을 가지고 있는데, 나는 그 셀로 걸을 때 셀에 들어가지만 텍스트를 선택하지는 않습니다. 값을 변경해야 할 때 먼저 백 스페이스 키를 사용해야합니다.셀을 입력 할 때 텍스트를 선택하는 방법

셀을 입력 한 후 수행 할 수있는 작업은 해당 셀의 내용을 선택 했습니까?

답변

1

이 용도로 동작을 사용하는 것이 좋습니다. 이 도움이

/// <summary> 
/// <see cref="Behavior{T}"/> of <see cref="TextBox"/> for selecting all text when the text box is focused 
/// </summary> 
public class TextBoxSelectOnFocusBehavior : Behavior<TextBox> 
{ 
    private void AssociatedObject_GotFocus(object sender, RoutedEventArgs e) 
    { 
     TextBox textBox = (sender as TextBox); 

     if (textBox != null) 
      textBox.SelectAll(); 
    } 

    /// <summary> 
    /// React to the behavior being attached to an object 
    /// </summary> 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.GotFocus += AssociatedObject_GotFocus; 
    } 

    /// <summary> 
    /// React to the behavior being detached from an object 
    /// </summary> 
    protected override void OnDetaching() 
    { 
     base.OnDetaching(); 

     AssociatedObject.GotFocus -= AssociatedObject_GotFocus; 
    } 
} 

희망 : 내가 생각 기능을 제공하는 최소한의 구현을 포함했다 아래이 찾고있는 사람이 있습니다.

+1

+1하지만 'Behavior '은 Blend SDK에서 찾을 수 있습니다. 또한 템플리트 화 된 격자 열이 필요할 것이며 간단한 텍스트 열은 그대로 동작을 사용할 수 없습니다. – AnthonyWJones

+0

글쎄, 나는 순진하게 그리드를보고 DataGrid 컨트롤과 반대되는 그리드 컨테이너를 상상했지만 다시 읽으면 셀에 대한 그의 언급이 후자를 제안하는 것처럼 보입니다. 그래, DataGridTemplateColumn에 텍스트 블록과 첨부 된 비헤이비어를 포함시키는 것이 좋습니다. WeakReference를 사용하는 것이 좋습니다.이 동작이 DataGrid에서 사용되는 경우, 분명히 OnDetaching이 필요할 때 항상 호출되는 것은 아니기 때문입니다. – ibebbs

+0

답장을 보내 주셔서 감사합니다. 불행히도 DataGridTemplateColumn (레거시 코드)을 사용할 수 없기 때문에이 솔루션은 저를위한 것이 아닙니다 :/ – user278618

관련 문제