如何在TextBox.Triggers(事件触发器)上执行一些操作
本文关键字:执行 操作 触发器 事件 TextBox Triggers | 更新日期: 2023-09-27 18:21:15
我必须禁用一个some按钮。
如何使用TextBox.Triggers?
有样品吗?
感谢您的回复!
我假设这与您的另一个问题有关,即根据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 }" />
顺便说一句,我对你的另一个问题的评论仍然适用于此。我个人会在您的ViewModel
中实现IDataErrorInfo
,并使SaveCommand.CanExecute()
仅在ViewModel.IsValid
时返回true。然后,如果SaveCommand
不应该执行
假设您有一个TextBox
和一个Button
,并且您希望在TextBox
为空时禁用您的Button
。这可以通过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>
尽管发布代码示例会很有帮助,并且会提供更好的解决方案,但我仍然可以推荐数据绑定。类似的东西
<Button Name="btnFoo"
Enabled="{Binding ElementName=txtblkBar, Converter={StaticResource ButtonVisibilityConverter}"/>
控件的资源部分包含
<local:ButtonVisibilityConverter Name="ButtonVisibilityConverter"/>
并且您已经在local引用的命名空间中定义了一个类CCD_ 14。我链接到上面的页面的数据转换部分有一个转换器类的示例。
编辑:
每当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();
}
}