Tengo un botón y un cuadro de texto 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?Botón Deshabilitar en WPF?
Respuesta
Esto debe 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>
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.
WPF es sin t windows forms habits ... – msfanboy
En MVVM (wich hace un montón de cosas mucho más fácil - usted debe probarlo) que tendría dos propiedades en su modelo de vista Text
que está obligado a su cuadro de texto y que tendría una propiedad ICommand Apply
(o similar) que está unido al botón:
<Button Command="Apply">Apply</Button>
la interfaz tiene un método ICommand
CanExecute
que es donde regresa 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.
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>
CodeBehind:
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
Windows 8 beta va a ser la única posibilidad de lograr esto. Al menos por hoy. –
Por código:
btn_edit.IsEnabled = true;
Por XAML:
<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" />
- 1. Deshabilitar el botón Guardar en WPF si la validación falla
- 2. Deshabilitar el retroceso en wpf
- 3. Datagridview, deshabilitar botón/fila
- 4. WPF Cómo deshabilitar DropShadowEffect
- 5. Cómo deshabilitar el botón, haga clic en?
- 6. Botón Deshabilitar en el envío del formulario
- 7. Deshabilitar el botón Atrás en el navegador
- 8. Cómo deshabilitar el botón minimizar en C#?
- 9. ¿Cómo deshabilitar el botón en UIActionSheet?
- 10. Cómo deshabilitar el borde del botón WPF al hacer clic en él?
- 11. Botón WPF con imagen
- 12. Botón WPF Mouseover Image
- 13. wpf botón plano
- 14. Botón giratorio WPF
- 15. Deshabilitar botón al hacer clic, pero habilitar otro botón
- 16. Deshabilitar un botón WPF, pero todavía tragar los eventos de clic
- 17. NSUndoManager y habilitar/deshabilitar un botón deshacer
- 18. ASP.NET ¿Cómo deshabilitar el botón al enviar?
- 19. ¿Cómo deshabilitar completamente el botón de enlace?
- 20. Cómo deshabilitar un botón más elegante
- 21. botón de deshabilitar con fondo personalizado android
- 22. cómo deshabilitar botón de enviar con jQuery
- 23. Cómo deshabilitar el botón de impresión QLPreviewController
- 24. cómo deshabilitar/habilitar un botón por jquery
- 25. Cómo deshabilitar un botón de Android?
- 26. Botón WPF haga clic en C# código
- 27. Ocultación de un botón en WPF
- 28. Botón parpadeante en la aplicación WPF
- 29. Deshágase del borde del botón en WPF?
- 30. Cómo alinear el botón en wpf treeview
Es mucho más elegante hacer la validación en el ViewModel. Eche un vistazo al artículo de Josh Smith bitbonk vinculado a. –
@Helge Klein, estoy absolutamente de acuerdo, pero como el OP no especificó que estaba usando MVVM y no es trivial cambiar a él si no está familiarizado, pensé que respondería de la forma más simple posible moda. –
Entiendo. Solo quería apuntar a los lectores futuros a la solución "mejor" si inicialmente es más compleja. –