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

时间:2019-01-24 01:33:28

标签: wpf xaml

正如我的帖子所建议的那样,当TextBox Text从xaml中为空时,我在StackOverflow上看到了一个禁用按钮的帖子。但是问题是,只要用户按下空格而不键入任何字符,该按钮就会启用。如果xaml iteself的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>

3 个答案:

答案 0 :(得分:1)

我认为仅暗示Xaml是不可能的。 我有两种暗示这种需求的方法,但是它们都需要代码。

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

答案 1 :(得分:1)

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

添加一个新的转换器类。 (这只是实现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 :(得分:1)

转换器似乎是最简单/最佳的mvvm方法。
ID还建议您使用不接受空格的简单custom textbox(根据需要自定义)
并禁用使用触发器〜