Проблема запуска и связывания в WPF - PullRequest
1 голос
/ 21 ноября 2010

Я создаю кнопку с простой полилинией, которую я хочу изменить, когда кнопка отключена (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 Ответ

2 голосов
/ 21 ноября 2010

Я нашел ответ самостоятельно.Я переместил 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>
...