来自不同控件的WPF触发器

时间:2014-07-22 14:16:49

标签: c# wpf

我正在尝试根据所包含文本框的焦点属性更改包含边框背景颜色。有人可以解释我的代码有什么问题吗?

<Border BorderBrush="LightBlue" BorderThickness="2" Background="#33000000">
    <Border.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger
                  Binding="{Binding IsFocused, ElementName=txtValue}"
                  Value="True">
                    <Setter Property="Border.Background" Value="Green" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    <Grid Margin="0" VerticalAlignment="Center">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBox Name="txtValue" Grid.Column="0" Text="20" />
        <TextBlock Grid.Column="1"  />
    </Grid>
</Border>

1 个答案:

答案 0 :(得分:4)

您的DataTrigger不会更改背景属性的值,因为您在Border声明中设置了它。因此,一旦设置,它将永远不会改变。要允许更改,您必须在样式中设置值。

 <Border BorderBrush="LightBlue" BorderThickness="2" >
    <Border.Style>            
        <Style TargetType="Border">
            <Setter Property="Background" Value="#33000000"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsFocused, ElementName=txtValue}" Value="True">
                    <Setter Property="Background" Value="Green" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    <Grid Margin="0" VerticalAlignment="Center">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBox Name="txtValue" Grid.Column="0" Text="20" />
        <TextBlock Grid.Column="1"  />
    </Grid>
</Border>