【问题标题】:Disable button when text box is empty or blank spaces from xaml当文本框为空或来自 xaml 的空格时禁用按钮
【发布时间】:2020-07-29 15:02:09
【问题描述】:

正如我的帖子所暗示的,我在 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>

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    比起使用按钮单击事件,我更喜欢使用 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);
     }
    

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

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

    那么你的绑定就变成了……

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

    【讨论】:

    • 是的,我已经编写了一个自定义转换器来修复它。
    【解决方案2】:

    我认为不可能仅通过 Xaml 来暗示。 我有两种方式来暗示这种需求,但它们都需要代码。

    1.当您使用MVVM时,您可以通过命令禁用按钮。 2.将按钮的IsEnable属性绑定到Textbox.Text,通过转换器检查 Textbox.Text 是否只是空字符。

    【讨论】:

      【解决方案3】:

      转换器似乎是最简单/最好的 mvvm 方式。
      我还建议使用不接受空间的简单custom textbox(根据需要自定义)
      并禁用使用触发器~

      【讨论】:

        猜你喜欢
        • 2012-10-16
        • 2012-10-16
        • 2015-04-24
        • 1970-01-01
        • 2011-10-27
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多