c# - 当文本框为空或来自 xaml 的空格时禁用按钮

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

最佳答案

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

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

 // 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);
 }

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

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

那么你的绑定(bind)就变成了……

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

关于c# - 当文本框为空或来自 xaml 的空格时禁用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54338167/

相关文章:

wpf - 在wpf中使用gridsplitter分割宽度设置为*的两列

c# - 为什么点击ToolStripMenuItem需要两次点击?

c# - LINQ 中的最大日期记录

wpf - WPF 内容的奇怪符号

wpf - MEF 组件上的 ShowDialog 仅工作一次

c# - 在 UI 线程上执行长任务

silverlight - 如何在 XAML 中使用 Segoe UI 符号

c# - 没有具有键 'IEnumerable<SelectListItem>' 的 'PestType' 类型的 ViewData 项

c# - 如何从字符串中提取前 3 个独立字符?

wpf - Prism 与卡利本相比如何?