Настройка кнопки без добавления рамки или другого содержимого - PullRequest
0 голосов
/ 26 января 2020

У меня есть кнопка WPF

<Button Style="{StaticResource BrandedButton}">Continue</Button>

В настоящее время она выглядит следующим образом:

<Style x:Key="BrandedButton" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="{StaticResource LowlightBrush}"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="FontFamily" Value="Open Sans Light"/>
    <Setter Property="FontSize" Value="35"/>
    <Setter Property="Padding" Value="50,10"/>
</Style>

enter image description here

Теперь я Я хочу управлять цветом (и ничем иным) для hover / press / et c, поэтому я добавил еще один установщик

    <Setter Property="Template" Value="{StaticResource BrandedButtonTemplate}"/>

И он указывает на этот ControlTemplate. Я видел только примеры, которые изменяют структуру кнопки, например, добавляя границу:

<ControlTemplate x:Key="BrandedButtonTemplate" TargetType="Button">
    <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="0">
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
        </Trigger>
        <Trigger Property="IsPressed" Value="true">
            <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

Но это убивает макет, который был применен ранее:

enter image description here

И наоборот, если я включу только ContentPresenter и пропущу обтекание Border, кнопка полностью исчезнет.

Как изменить режим наведения и нажимать цвета без изменения что-нибудь еще? Какая самая маленькая / самая легкая реализация для того, что должно быть тривиальной задачей?

1 Ответ

1 голос
/ 26 января 2020

Ваш ControlTemplate игнорирует свойство Padding кнопки.

Добавление привязки шаблона для ContentPresenter Margin:

<ControlTemplate x:Key="BrandedButtonTemplate" TargetType="Button">
    <Border Background="{TemplateBinding Background}" BorderThickness="0">
        <ContentPresenter
            Margin="{TemplateBinding Padding}"
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        ...
    </ControlTemplate.Triggers>
</ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...