59 votes

Désactiver le bouton en WPF?

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?

57voto

Steve Greatrex Points 8466

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>

30voto

bitbonk Points 14057

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.

28voto

daniele3004 Points 62

Par code:

btn_edit.IsEnabled = true;

En XAML:

<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" />

5voto

sunpech Points 592

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

2voto

Charlie Points 9880

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X