Не срабатывает триггер при наведении на кнопку WPF

361
18 сентября 2017, 01:42

Имеется "стандартный" стиль для кнопок закрыть/свернуть/развернуть:

<Style TargetType="{x:Type Button}" x:Key="WindowControlButton">
    <Setter Property="Foreground" Value="{StaticResource ForegroundGreyDarkBrush}" />
    <Setter Property="Margin" Value="8 0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Red" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Также я пытался задать триггер не через template:

 <Style TargetType="{x:Type Button}" x:Key="WindowControlButton">
    <Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" />
    <Setter Property="Foreground" Value="{StaticResource ForegroundGreyDarkBrush}" />
    <Setter Property="Margin" Value="8 0" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

И имеется отдельный стиль для кнопки "свернуть", который наследуется от вышеупомянутого "стандартного" стиля, контент для которой задается при помощи Path:

 <Style TargetType="{x:Type Button}" x:Key="WindowMinimizeButton" BasedOn="{StaticResource WindowControlButton}">        
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid MaxHeight="9" MaxWidth="9">
                    <Path                          
                                RenderOptions.EdgeMode="Aliased"
                                Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}"
                                StrokeThickness="1"
                                Stretch="None"
                                Data="M0,8 H8 M0,7 H8 M0,6 H8"
                            />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Вопрос: почему не срабатывает триггер при наведении на кнопку? Должен меняться задний фон на красный, я так понимаю это как-то связано с Path, так как если текст у самой кнопки задавать через Content, то все работает, спасибо)

Answer 1

Вынес Path в саму кнопку:

<Button Style="{StaticResource WindowControlButton}">
    <Grid MaxHeight="9" MaxWidth="9">
       <Path                          
            RenderOptions.EdgeMode="Aliased"
            Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}"
            StrokeThickness="1"
            Stretch="None"
            Data="M0,8 H8 M0,7 H8 M0,6 H8"
        />
   </Grid>
</Button>

Сам стиль WindowControlButton:

<Style TargetType="{x:Type Button}" x:Key="WindowControlButton">
    <Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" />
    <Setter Property="Foreground" Value="{StaticResource ForegroundGreyDarkBrush}" />
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Padding" Value="12 0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="{StaticResource BackgroundGreyLightBrush}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
READ ALSO
Код не возвращает Bool в положение false C#

Код не возвращает Bool в положение false C#

Код не возвращает Bool в false в Unity3D, подскажите как написать, надоело уже танцевать с бубном

425
Рекурсивное сохранение TreeView в XML

Рекурсивное сохранение TreeView в XML

Есть код с рекурсией внутри, проблема в том что вываливается переполнение стека, с тем учетом что условие выхода из рекурсивного перехода...

271
Генератор формы? [требует правки]

Генератор формы? [требует правки]

Какой есть генератор формы с неограниченной вложенностью input элементов? Должна быть поддержка строк и массивов

251
Laravel 5 SleepingOwl Admin слетели базовые css и js

Laravel 5 SleepingOwl Admin слетели базовые css и js

После загрузки картинки в AdminFormElement::image на странице происходит эдакое

312