2016-06-23 2 views
0

새 창이 열리면 특정 텍스트 상자에 포커스를두고 텍스트 전체를 선택하려고합니다. 내 그리드에서 이것을 사용하는 요소 포커싱 https://blogs.msdn.microsoft.com/argumentnullexceptionblogpost/2013/04/12/a-simple-selectall-behavior-for-textboxes/TextBox 포커스 및 창 초기화 후 모든 텍스트 선택

: 나는이 튜토리얼의 기초에 그것을 시도

<Grid d:DataContext="{StaticResource DesignTimeLayerViewModel1}" FocusManager.FocusedElement="{Binding ElementName=LayerNameInput}"> 

을 그리고 상호 작용 행동을 시도 :

<TextBox x:Name="LayerNameInput" 
    Text="{Binding MapLayerName, UpdateSourceTrigger=PropertyChanged}" 
    VerticalContentAlignment="Center" 
    Width="240"> 
    <i:Interaction.Behaviors> 
     <behaviors:SelectAllTextBoxBehavior></behaviors:SelectAllTextBoxBehavior> 
    </i:Interaction.Behaviors> 
</TextBox> 

행동 강령 :

public class SelectAllTextBoxBehavior : Behavior<TextBox> 
{ 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     this.AssociatedObject.GotFocus += this.OnTextBoxGotFocus; 
    } 

    protected override void OnDetaching() 
    { 
     this.AssociatedObject.GotFocus -= this.OnTextBoxGotFocus; 
     base.OnDetaching(); 
    } 

    private void OnTextBoxGotFocus(object sender, RoutedEventArgs e) 
    { 
     this.AssociatedObject.SelectAll(); 
    } 
} 

문제는 bindi ng. 창을 만들 때 문제가 발생하지만 실제로 TextBox에 텍스트가 없습니다. 그런 다음 TextBox가 초기화되고 텍스트가 바인드 된 변수의 값으로 설정되며 선택 항목이 손실됩니다. Tab을 여러 번 사용하여 TextBox의 초점을 다시 잡으면 제대로 작동합니다.

TextBox를 포커스하고 창 만들기시 전체 텍스트를 선택하는 방법은 무엇입니까? 그 뒤에 엄청난 양의 코드가 없다면?

미리 감사드립니다.

답변

0

나는 해결 방법으로 문제를 해결. 창 시작 중에 TextBox의 초기 텍스트가 설정되면 OnTextBoxTextChanged 이벤트가 발생합니다. 나는 그것을 잡았고, 텍스트를 선택하고, 이벤트를 deatach하기보다는.

답변과 비교할 때의 이점은 어두운 템플러입니다. 탭으로 전체 텍스트가 다시 선택됩니다.

protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.GotFocus += OnTextBoxGotFocus; 
     AssociatedObject.TextChanged += OnTextBoxTextChanged; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.GotFocus -= OnTextBoxGotFocus; 
     AssociatedObject.TextChanged -= OnTextBoxTextChanged; 
     base.OnDetaching(); 
    } 

    private void OnTextBoxGotFocus(object sender, RoutedEventArgs e) 
    { 
     AssociatedObject.SelectAll(); 
    } 

    private void OnTextBoxTextChanged(object sender, RoutedEventArgs e) 
    { 
     AssociatedObject.SelectAll(); 
     AssociatedObject.TextChanged -= OnTextBoxTextChanged; 
    } 
0

잘 여기 당신의 텍스트 상자 을 집중하기 위해 "window_loaded"이벤트를 사용할 수있는 것은 예입니다 :

private void window_Loaded(object sender, RoutedEventArgs e) 
    { 
     textBox.Focus(); 
     textBox.SelectAll(); 
    } 
관련 문제