C# 如何在TextBox.Triggers(事件触发器)上执行一些操作?

C# 如何在TextBox.Triggers(事件触发器)上执行一些操作?,c#,wpf,xaml,C#,Wpf,Xaml,我必须禁用某个按钮 如何使用TextBox.Triggers 有样品吗 谢谢你的回复 尽管发布代码示例会很有帮助,并且会提供更好的解决方案,但我仍然可以推荐。差不多 <Button Name="btnFoo" Enabled="{Binding ElementName=txtblkBar, Converter={StaticResource ButtonVisibilityConverter}"/> 虽然发布代码示例会很有帮助,并且会提供更好的解决方案,但我仍然可以

我必须禁用某个按钮

如何使用TextBox.Triggers

有样品吗


谢谢你的回复

尽管发布代码示例会很有帮助,并且会提供更好的解决方案,但我仍然可以推荐。差不多

<Button Name="btnFoo"
        Enabled="{Binding ElementName=txtblkBar, Converter={StaticResource ButtonVisibilityConverter}"/>

虽然发布代码示例会很有帮助,并且会提供更好的解决方案,但我仍然可以推荐。差不多

<Button Name="btnFoo"
        Enabled="{Binding ElementName=txtblkBar, Converter={StaticResource ButtonVisibilityConverter}"/>

假设您有一个
文本框
和一个
按钮
,当
文本框
为空时,您希望禁用
按钮
。这可以通过
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>

假设您有一个
文本框
和一个
按钮
,当
文本框
为空时,您想禁用
按钮
。这可以通过
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>

我假设这与根据文本框是否存在验证错误触发按钮上的Enabled属性有关

如果是这样,您将使用
DataTrigger
测试
TextBox.Validation.HasError
属性以查看它是否有任何错误,如果有,请禁用按钮

<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>

作为旁注,我对你的另一个问题的评论在这里仍然适用。我个人会在您的
ViewModel
中实现
IDataErrorInfo
,并使
SaveCommand.CanExecute()
仅在
ViewModel.IsValid
时返回true。然后,如果
SaveCommand
不应执行,它将自动禁用按钮。我假设这与根据文本框是否存在验证错误触发按钮上的Enabled属性有关

如果是这样,您将使用
DataTrigger
测试
TextBox.Validation.HasError
属性以查看它是否有任何错误,如果有,请禁用按钮

<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>

作为旁注,我对你的另一个问题的评论在这里仍然适用。我个人会在您的
ViewModel
中实现
IDataErrorInfo
,并使
SaveCommand.CanExecute()
仅在
ViewModel.IsValid
时返回true。然后,如果
SaveCommand
不应该执行,它将自动关闭按钮

太好了!!!!我建议你能多写一些关于如何实现ButtonVisibilityConverter的代码吗<代码>返回!IsNullOrEmpty(txtblk.Text)-1,因为您应该为作业使用正确的工具。如果要将值从一种类型转换为另一种类型,请使用
转换器。如果要根据条件更改值,请使用
DataTrigger
。问题是如何根据条件更改值。因此,您正在使用
按钮VisibilityConverter
绑定
启用的
,并且发布的类名为
ColorBrushConverter
,它返回一个bool,我从名称中从未猜到。此外,为什么要依赖向转换器发送文本块?为什么不在XAML中绑定到TextBlock的Text属性,那么转换器就更易于重用。@Cadrell该名称是由于复制粘贴现有代码而导致的键入错误。修正了。太好了!!!!我建议你能多写一些关于如何实现ButtonVisibilityConverter的代码吗<代码>返回!IsNullOrEmpty(txtblk.Text)-1,因为您应该为作业使用正确的工具。如果要将值从一种类型转换为另一种类型,请使用
转换器。如果要根据条件更改值,请使用
DataTrigger
。问题是如何根据条件更改值。因此,您正在使用
按钮VisibilityConverter
绑定
启用的
,并且发布的类名为
ColorBrushConverter
,它返回一个bool,我从名称中从未猜到。此外,为什么要依赖向转换器发送文本块?为什么不在XAML中绑定到TextBlock的Text属性,那么转换器就更易于重用。@Cadrell该名称是由于复制粘贴现有代码而导致的键入错误。修正。谢谢你的意见。谢谢你的意见。你的解决方案是最好的!泰!你的解决方案是最好的!泰!