我必须禁用某个按钮。
我如何使用 TextBox.Triggers ?
有样品吗?
感谢您的回复!
答案 0 :(得分:4)
我假设这与your other question有关,根据TextBox是否有验证错误触发Button上的Enabled属性。
如果是这样,您可以使用DataTrigger
来测试TextBox.Validation.HasError
属性以查看它是否有任何错误,如果是,则禁用Button
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="True" />
<DataTrigger Binding="{Binding ElementName=MyTextBox, Path=Validation.HasError" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style>
请确保将TextBox与ValidatesOnDataErrors="True"
绑定,以使其正常工作
<TextBox x:Name="MyTextBox" Text="{Binding SomeText, ValidatesOnDataErrors=True }" />
作为旁注,我对您的其他问题的评论仍然适用于此。我会亲自在IDataErrorInfo
中实施ViewModel
,并使SaveCommand.CanExecute()
仅在ViewModel.IsValid
时返回true。然后,如果SaveCommand
不应该执行
答案 1 :(得分:3)
假设您有TextBox
和Button
,并且想要在Button
为空时禁用TextBox
。这可以通过DataTriggers
:
<TextBox x:Name="textBox" />
<Button>
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=textBox}" Value="">
<Setter Property="Button.IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 2 :(得分:0)
虽然发布代码示例会有所帮助并且可以提供更好的解决方案,但我仍然可以推荐data binding。像
这样的东西<Button Name="btnFoo"
Enabled="{Binding ElementName=txtblkBar, Converter={StaticResource ButtonVisibilityConverter}"/>
控件的资源部分包含
<local:ButtonVisibilityConverter Name="ButtonVisibilityConverter"/>
并且您已在local引用的命名空间中定义了一个类ButtonVisibilityConverter
。我上面链接的页面的数据转换部分有一个示例转换器类。
修改强>
在txtblkBar
为空时将按钮设置为禁用的代码:
[ValueConversion(typeof(TextBlock), typeof(bool?))]
public class ButtonVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
TextBlock txtblk = value as TextBlock;
if (null == txtblk)
return false;
return !string.IsNullOrEmpty(txtblk.Text);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// Don't need to use the back conversion
throw new NotImplementedException();
}
}