当文本框为空或 xaml 中的空格时禁用按钮

nik*_*hil 3 c# wpf xaml

正如我的帖子所建议的,我在 StackOverflow 上看到了一篇帖子,用于在 xaml 中的 TextBox 文本为空时禁用按钮。但问题是,每当用户按下空格键而不输入任何字符时,该按钮就会启用。如果 xaml 本身的 TextBox 中只有空格而没有任何文本,是否可以禁用该按钮。

<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>
Run Code Online (Sandbox Code Playgroud)

Ric*_*imo 8

我更喜欢使用 Command 属性并提供实现 ICommand接口的类的 MVVM 方法,而不是使用按钮单击事件。然后,此类可以通过该接口的 CanExecute 和 CanExecuteChanged 部分指示它是否启用,这将启用和禁用该按钮。但是,您只是在点击事件后面执行代码,所以......

添加新的转换器类。(它只是一个实现IConverter接口的类。)然后在绑定中使用转换器。

 // 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);
 }
Run Code Online (Sandbox Code Playgroud)

在 XAML 的适当资源部分(例如,对于窗口或用户控件)声明转换器,如下所示:

<yourNamespace:IsNullOrWhiteSpaceConverter x:Key="IsNullOrWhiteSpaceConverter" />
Run Code Online (Sandbox Code Playgroud)

然后你的绑定就变成了...

IsEnabled="{Binding ElementName=txtReasonForChange,Path=Text,
    Converter={StaticResource IsNullOrWhiteSpaceConverter}}"
Run Code Online (Sandbox Code Playgroud)