2017-05-18 5 views
0

Ich habe etwas Kontrolle in einem Stackpanel.
Wenn ich mit der rechten Maustaste auf das Panel klicke, bekomme ich ein Kontextmenü und kann den Text dieser Steuerelemente bearbeiten.
Hier habe ich TextBlock verwendet, um die Daten und TextBox zum Bearbeiten der Daten anzuzeigen (Wenn TextBox sichtbar ist TextBlock wird minimiert und umgekehrt)
Ich möchte den gesamten Text der TextBox auswählen und fokussieren, wenn die TextBox sichtbar ist.Wie wähle ich text einer texbox in wpf MVVM

Ich versuchte mit Interaktion. Aber hat nicht funktioniert :(
Gibt es eine Möglichkeit, dies zu tun
Zum Beispiel: Wenn der TextBox sichtbar ist, kann ich einen Befehl in meinem Viewmodel Feuer und wählen Sie den gesamten Text aus meinem Viewmodel

<TextBlock Text="{Binding MachineResponseText}" Visibility="{Binding IsEditing, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=true}"/> 
<TextBox x:Name="MachineResponseTextBox" Text="{Binding MachineResponseText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding IsEditing, Converter={StaticResource BoolToVisibilityConverter}}"> 
    <TextBox.Style> 
     <Style TargetType="TextBox"> 
      <Style.Triggers> 
       <Trigger Property="IsVisible" Value="True"> 
        <!--Is there any way to select all the text when this textbox is visible?--> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
.
+0

Was Sie wollen, ist es, "Highlight" der gesamte Text in einem 'TextBox', so dass Ihre' VM' sollte raushalten. Das klingt für mich wie ein Code hinter der Lösung, da die 'VM' nicht wirklich interessiert, ob der Text ausgewählt ist oder nicht. Wenn ich dich nicht missverstanden habe? – XAMlMAX

+0

Ja, das stimmt. Ich muss VM nicht verwenden. Aber wie kann ich den Text hervorheben und die Tastatur auf das Textfeld fokussieren? –

+0

Die 'TextBox' hat eine' SelectedText' Eigenschaft, die Sie auf 'gotFocus'' event' setzen können. Aber wenn das nur zwischen dem Editiermodus wechselt, warum manipuliere ich die 'IsEnabled' Eigenschaft auf' TextBox' nicht? – XAMlMAX

Antwort

0

Dies ist keine vollständige Antwort auf Ihre Frage, mehr von Push in die richtige Richtung

GotKeyboardFocus Handler Ihre Textbox hinzufügen und textbox.SelectAll(), dh

XAML Teil laufen.

<StackPanel> 
    <Button>B1</Button> 
    <TextBox Text="Test123" GotKeyboardFocus="TextBox_GotKeyboardFocus"/> 
    <TextBlock>123</TextBlock> 
    <Button>B2</Button> 
</StackPanel> 

-Code hinter Teil:

private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    var textBox = (TextBox) sender; 
    if (textBox.SelectionLength == 0) 
    { 
     textBox.SelectAll(); 
    } 
} 

Möglicherweise müssen Tastatur zu handhaben als auch konzentrieren, indem TextBox.Focus() Aufruf beim Umschalten in den Bearbeitungsmodus, oder in mehr MVVM Weise wie here

0

erklärt Es ist ein Ereignis, das Sie verwenden können, und es ist in allen UIElement UIElement.IsVisibleChanged Danach appliend Sie den Fokus in der Textbox zu machen und den Text wie diese

wählen
private void TextBox_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    this.myTextBox.Focus(); 
    this.myTextBox.SelectAll(); 
} 

Dies ist ein Code hinter Version Sie können das gleiche in einem MVVM-Kontext tun, indem Sie das Ereignis in Ihrem Ansichtsmodell auslösen.

Dieser StackOverflow-Post kann Ihnen helfen, wenn Sie einen TextfeldFokus in MVVM festlegen möchten.

How to set focus to textbox using MVVM?