正如我的帖子所建议的,我在 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)
我更喜欢使用 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)