J'ai un bouton et une zone de texte dans mon application wpf. Comment puis-je faire pas le bouton activer jusqu'à ce que l'utilisateur entre du texte dans la zone de texte?
Réponses
Trop de publicités?Cela devrait le faire:
<StackPanel>
<TextBox x:Name="TheTextBox" />
<Button Content="Click Me">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=TheTextBox}" Value="">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
Dans MVVM (qui en fait beaucoup de choses beaucoup plus facile, vous devriez essayer de), vous disposez de deux propriétés dans votre ViewModel Text
qui est lié à votre zone de texte et vous auriez un ICommand propriété Apply
(ou similaire) qui est lié au bouton:
<Button Command="Apply">Apply</Button>
L' ICommand
interface est une Méthode CanExecute
qui est l'endroit où vous revenez true
if (!string.IsNullOrWhiteSpace(this.Text)
. Le reste est fait par WPF pour vous (activation/désactivation, l'exécution de la commande en cliquant).
L'article lié explique cela en détail.
Je sais que ce n'est pas aussi élégant que les autres posts, mais c'est plus simple xaml/code-behind exemple de la façon d'accomplir la même chose.
Xaml:
<StackPanel Orientation="Horizontal">
<TextBox Name="TextBox01" VerticalAlignment="Top" HorizontalAlignment="Left" Width="70" />
<Button Name="Button01" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,0,0,0" />
</StackPanel>
Le code-behind:
Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Button01.IsEnabled = False
Button01.Content = "I am Disabled"
End Sub
Private Sub TextBox01_TextChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles TextBox01.TextChanged
If TextBox01.Text.Trim.Length > 0 Then
Button01.IsEnabled = True
Button01.Content = "I am Enabled"
Else
Button01.IsEnabled = False
Button01.Content = "I am Disabled"
End If
End Sub
Vous pourriez vous abonner à l' TextChanged
d'un événement sur l' TextBox
et si le texte est vide définir l' Button
de personnes handicapées. Ou, vous pouvez lier l' Button.IsEnabled
de la propriété de l' TextBox.Text
de la propriété et de l'utilisation d'un convertisseur qui retourne vrai si il n'y a aucun texte, et false sinon.