如何让这个DataTrigger起作用?

8
如果ViewModel属性为“invalid”,我希望我的TextBox具有红色背景。我需要更改什么才能使其生效?
这个版本告诉我“Background没有限定类型名称”。
<TextBox
    Width="200"
    Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Triggers>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
            <Setter Property="TextBox.Background" Value="Tomato"/>
        </DataTrigger>
    </TextBox.Triggers>
</TextBox>

当我添加"TextBox."时,它告诉我必须有一个EventTrigger
<TextBox
    Width="200"
    Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Triggers>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
            <Setter Property="Background" Value="Tomato"/>
        </DataTrigger>
    </TextBox.Triggers>
</TextBox>
1个回答

14

让我来回答这个问题,我曾经忘记将所有内容包裹在样式中,现在我已经加上了样式,这个代码可以正常工作:

<TextBox
    Width="200"
    Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
                    <Setter Property="TextBox.Background" Value="Tomato"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

或者这样:

<Style x:Key="FieldEmailStyle" TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
            <Setter Property="TextBox.Background" Value="Yellow"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="valid">
            <Setter Property="TextBox.Background" Value="LightGreen"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

    <TextBox
        Width="200"
        Style="{StaticResource FieldEmailStyle}"
        Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    </TextBox>

我不得不在<Style>标签中添加TargetType="TextBox" - brettljausn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接