Изменение метки кнопки на переднем плане в фокусе с меткой внутри содержимого - PullRequest
1 голос
/ 16 апреля 2020

У меня есть кнопка, мне нужно изменить цвет фона и переднего плана, когда кнопка находится в фокусе. У меня работает изменение цвета фона, но я не могу заставить работать изменение цвета переднего плана (на этикетке).

Я хочу сделать это только в XAML.

Моя кнопка:

          <Button Style="{StaticResource ModButtonWhite}"
              Name="btnConnect"
              Height="30"
              Click="btnConnect_Click"
              Width="75"
              Margin="0,0,15,0">
        <Label Name ="btnConnectLabel" Content="Re-_Connect" />
      </Button>

Мой стиль:

<Style TargetType="Button"
     x:Key="ModButtonWhite">
<Setter Property="Foreground"
        Value="White" />
<Setter Property="Background"
        Value="Transparent" />
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="Button">
      <Border Background="{TemplateBinding Background}"
              CornerRadius="5"
              BorderThickness="1"
              BorderBrush="White">
        <ContentPresenter HorizontalAlignment="Center"
                          VerticalAlignment="Center" />
      </Border>
      <ControlTemplate.Triggers>
        <Trigger Property="Button.IsFocused"
                 Value="True">
          <Setter Property="Background"
                  Value="White" />
          <Setter Property="Foreground"
                  Value="DeepSkyBlue" />
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
  </Setter.Value>
</Setter>
<Style.Resources>
  <Style TargetType="Label">
    <Setter Property="Foreground"
            Value="White" />
    <Style.Triggers>
      <Trigger Property="IsMouseOver"
               Value="True">
        <Setter Property="Foreground"
                Value="DeepSkyBlue" />
      </Trigger>
    </Style.Triggers>
  </Style>
</Style.Resources>
<Style.Triggers>
  <Trigger Property="IsMouseOver"
           Value="True">
    <Setter Property="Background"
            Value="White" />
    <Setter Property="Opacity"
            Value=".4" />
    <Setter Property="Foreground"
            Value="DeepSkyBlue" />
  </Trigger>

</Style.Triggers>

1 Ответ

1 голос
/ 16 апреля 2020

Все, что вам нужно сделать, это привязать Label.Foreground к Button.Foreground. Нет необходимости в каких-либо дополнительных стилях, определенных в словаре Style.Resources. Просто простой стиль для переопределения Button.Template:

<Window>
  <Window.Resources>
    <Style TargetType="Button"
           x:Key="ModButtonWhite">
      <Setter Property="Foreground"
              Value="White" />
      <Setter Property="Background"
              Value="Transparent" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <Border Background="{TemplateBinding Background}"
                    CornerRadius="5"
                    BorderThickness="1"
                    BorderBrush="White">
              <ContentPresenter HorizontalAlignment="Center"
                                VerticalAlignment="Center" />
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="Button.IsFocused"
                       Value="True">
                <Setter Property="Background"
                        Value="White" />
                <Setter Property="Foreground"
                        Value="DeepSkyBlue" />
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>

  <Button Style="{StaticResource ModButtonWhite}">
    <Label Content="Click me!"
           Foreground="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}" />
  </Button>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...