¿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