TextBlock前景绑定到IsEnabled

时间:2014-09-11 17:40:50

标签: wpf

我想知道为什么Style TextBlock状态发生变化时Foreground Checkbox颜色不会改变IsChecked <CheckBox Name="checkbox" IsChecked="True"/> <TextBlock Foreground="LightGray" IsEnabled="{Binding ElementName=checkbox, Path=IsChecked}"> <TextBlock.Style> <Style TargetType="TextBlock"> <Style.Triggers> <Trigger Property="TextBlock.IsEnabled" Value="False"> <Setter Property="TextBlock.Foreground" Value="Gray" /> </Trigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> 颜色

{{1}}

2 个答案:

答案 0 :(得分:7)

您已设置 本地值,该值始终优先于样式触发器 。在样式中移动属性声明,它将起作用,因为样式触发器的优先级高于样式设置器。

<TextBlock IsEnabled="{Binding ElementName=checkbox, Path=IsChecked}">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="LightGray"/> <-- HERE
            <Style.Triggers>
                <Trigger Property="TextBlock.IsEnabled" Value="False">
                    <Setter Property="TextBlock.Foreground" Value="Gray" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

继续阅读 - Dependency Property Value Precedence

答案 1 :(得分:0)

更新您现有的样式,并在TextBlock

的样式上添加默认属性值
<TextBlock Foreground="LightGray" IsEnabled="{Binding ElementName=checkbox, Path=IsChecked}">
     <TextBlock.Style>
           <Style TargetType="TextBlock">
                 <Style.Triggers>
                       <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Foreground" Value="Gray" />
                       </Trigger>
                  </Style.Triggers>
            </Style>
           <Setter Property="Foreground" Value="Black"/>
      </TextBlock.Style>
 </TextBlock>