1
votes

Désactiver le bouton lorsque la zone de texte est vide ou des espaces vides de xaml

Comme mon article le suggère, j'ai vu un article ici sur StackOverflow pour désactiver un bouton lorsque le texte TextBox est vide de xaml. Mais le problème est que chaque fois que l'utilisateur appuie sur espace sans taper de caractère, le bouton s'active. Est-il possible de désactiver le bouton s'il n'y a que des espaces vides sans aucun texte dans la zone de texte dans le xaml lui-même.

<TextBox x:Name="txtReasonForChange" Grid.Row="0" Grid.Column="1" TextWrapping="Wrap" ScrollViewer.VerticalScrollBarVisibility="Auto"></TextBox>
 <Button x:Name="btnSaveOrSaveAs" Grid.Row="2" Grid.Column="1" IsEnabled="{Binding ElementName=txtReasonForChange,Path=Text.Length}" HorizontalAlignment="Right" Click="btnSaveOrSaveAs_Click"></Button>


0 commentaires

3 Réponses :


1
votes

Je ne pense pas qu'il soit possible d'impliquer uniquement par Xaml. J'ai deux façons d'impliquer cette demande, mais elles ont toutes besoin de code.

1.Lorsque vous utilisez MVVM, vous pouvez désactiver le bouton via la commande. 2.Lier la propriété IsEnable du bouton à Textbox.Text, via un convertisseur pour vérifier wether Textbox.Text est seulement un caractère vide.


0 commentaires

3
votes

Plutôt que d'utiliser l'événement de clic de bouton, je préférerais une approche MVVM consistant à utiliser la propriété Command et à fournir une classe qui implémente ICommand interface. Cette classe peut alors indiquer si elle est activée ou non, via les parties CanExecute et CanExecuteChanged de cette interface, qui activeront et désactiveront le bouton. Cependant, vous faites juste un code derrière l'événement de clic, donc ...

Ajoutez une nouvelle classe de convertisseur. (Il s'agit simplement d'une classe implémentant le interface IConverter .) Ensuite, utilisez le convertisseur dans la liaison.

IsEnabled="{Binding ElementName=txtReasonForChange,Path=Text,
    Converter={StaticResource IsNullOrWhiteSpaceConverter}}"

Déclarez le convertisseur dans une section Ressources appropriée du XAML (par exemple pour la fenêtre ou le contrôle utilisateur) comme ceci:

<yourNamespace:IsNullOrWhiteSpaceConverter x:Key="IsNullOrWhiteSpaceConverter" />

Alors votre liaison devient ...

 // In your converter class, which you could call IsNullOrWhiteSpaceConverter
 public object Convert(object value, Type targetType,
     object parameter, System.Globalization.CultureInfo culture)
 {
      var input = (string)value;
      return String.IsNullOrWhiteSpace(input);
 }


1 commentaires

Oui, j'ai écrit un convertisseur personnalisé pour le réparer.



1
votes

Le convertisseur semble être le moyen le plus simple / le meilleur mvvm.
Id suggère également d'utiliser une simple zone de texte personnalisée qui n'accepte pas d'espace (personnalisez-la si nécessaire)
Et désactiver à l'aide de déclencheurs ~


0 commentaires