WPF触发器和绑定问题

时间:2010-11-21 18:51:24

标签: wpf data-binding triggers styles

我正在创建一个带有简单折线的按钮,我想在按钮被禁用时更改颜色(btnUp.IsEnabled = false)。

我试过了:

<RepeatButton x:Name="btnUp" Foreground="Green">
  <RepeatButton.Style>
    <Style TargetType="{x:Type RepeatButton}">
      <Setter Property="Content">
        <Setter.Value>
          <Polyline x:Name="arrowUp" Points="0,2 3,0 6,2" Stroke="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton}, Path=Foreground, Mode=TwoWay}" StrokeThickness="2"/>
        </Setter.Value>
      </Setter>
      <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
          <Setter Property="Foreground" Value="#FFFFFFFF"/>
        </Trigger>
      </Style.Triggers>
    </Style>
  </RepeatButton.Style>
</RepeatButton>

但禁用按钮时,折线仍然具有相同的(绿色)颜色。即使我确实认为它是白色的,因为button.foreground和polyline.stroke之间的数据绑定。

但是,如果我将触发器更改为此功能(按钮已折叠):

<Trigger Property="IsEnabled" Value="False">
  <Setter Property="Visibility" Value="Collapsed"/>
</Trigger>

1 个答案:

答案 0 :(得分:2)

我自己找到了答案。 我将Foreground="Green"移到<Setter Property="Foreground" Value="#FF383838"/>内的单独的设置器<Style>,然后就可以了。 我不确定为什么。

以下是完整的解决方案:

<RepeatButton x:Name="btnUp">
  <RepeatButton.Style>
    <Style TargetType="{x:Type RepeatButton}">
      <Setter Property="Foreground" Value="Green"/>
      <Setter Property="Content">
        <Setter.Value>
          <Polyline x:Name="arrowUp" Points="0,2 3,0 6,2" Stroke="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton}, Path=Foreground, Mode=TwoWay}" StrokeThickness="2"/>
        </Setter.Value>
      </Setter>
      <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
          <Setter Property="Foreground" Value="#FFFFFFFF"/>
        </Trigger>
      </Style.Triggers>
    </Style>
  </RepeatButton.Style>
</RepeatButton>