带有Datatrigger的VisualBrush在WPF中不起作用

本文关键字:WPF 不起作用 VisualBrush Datatrigger 带有 | 更新日期: 2023-09-27 18:00:21

我的脚本编写了这段代码,以便在用户填充字段之前在字段中显示辅助文本(如果出现验证错误,还计划对其进行一些修改以显示验证错误),但触发器并不是触发的。这个代码出了什么问题?

xaml:

<TextBox x:Name="firstName" Validation.Error="Text_ValidationError"
             Text="{Binding UpdateSourceTrigger=LostFocus, Path=firstName, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" Margin="30,12,50,245">
        <TextBox.Style>
            <Style TargetType="TextBox" >
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=firstName}" Value="">
                        <Setter Property="Background">
                            <Setter.Value>
                                <VisualBrush Stretch="None">
                                    <VisualBrush.Visual>
                                        <TextBlock Text="First name" />
                                    </VisualBrush.Visual>
                                </VisualBrush>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

带有Datatrigger的VisualBrush在WPF中不起作用

不要使用DataTrigger,这是没有必要的(绑定可能会被破坏,事实上这是我唯一能想到的可能导致这种情况不起作用的事情),使用普通的Trigger:

<Trigger Property="Text" Value="">
    <Setter Property="Background">
        <Setter.Value>
            <VisualBrush Stretch="None">
                <VisualBrush.Visual>
                    <TextBlock Text="First name" />
                </VisualBrush.Visual>
            </VisualBrush>
        </Setter.Value>
    </Setter>
</Trigger>

经过测试,它是有效的。这还有一个优点,即当用户开始键入时,背景会立即消失,而不是当控件上的焦点丢失并更新源字符串时。