wpf button textbox

¿Deshabilitar el botón en WPF?



button textbox (5)

En MVVM (lo que facilita mucho las cosas, debería intentarlo), usted tendría dos propiedades en su Text ViewModel vinculadas a su TextBox y tendría una propiedad ICommand Apply (o similar) que está vinculada a la botón:

<Button Command="Apply">Apply</Button>

La interfaz de ICommand tiene un método CanExecute que devuelve true if (!string.IsNullOrWhiteSpace(this.Text) . El resto lo hace WPF por usted (habilitando / deshabilitando, ejecutando el comando real al hacer clic).

El artículo vinculado lo explica en detalle.

Tengo un botón y un TextBox en mi aplicación WPF. ¿Cómo puedo hacer que el botón no se active hasta que el usuario ingrese texto en el cuadro de texto?


Esto debería hacerlo:

<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>


Por código:

btn_edit.IsEnabled = true;

Por XAML:

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


Puede suscribirse al evento TextChanged en el TextBox y si el texto está vacío, configure el Button como deshabilitado. O puede vincular la propiedad Button.IsEnabled a la propiedad TextBox.Text y usar un convertidor que devuelva verdadero si hay texto y falso de lo contrario.


Sé que esto no es tan elegante como las otras publicaciones, pero es un ejemplo más sencillo de xaml / codebehind de cómo lograr lo mismo.

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>

Código detrás:

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