Свойство IsMouseOver для кнопки не работает - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть эта кнопка, и я хотел изменить дизайн, если навести на нее курсор мыши.Это не работает, и я не получаю ошибку.Что я делаю неправильно?(Я действительно новичок в WPF)

    <Button MaxWidth="180"
            Margin="5"
            DockPanel.Dock="Top"
            Padding="5"
            FontSize="12"
            Foreground="#1261AC"
            FontWeight="SemiBold"
            BorderBrush="Transparent">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border CornerRadius="5" Background="LightGray" BorderThickness="1" Padding="5">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Foreground" Value="#157ec4"/>
                        <Setter Property="Background" Value="#000000"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

Сама кнопка работает, но она не меняет цвет фона или шрифта.(Цвета в моем примере только для тестирования)

1 Ответ

0 голосов
/ 15 апреля 2019

Проблема с вашим кодом заключается в том, что вы непосредственно определяете фон границы как серый.Теперь вы меняете фон управления с помощью триггера.Однако фон, заданный триггером, еще не связан с фоном границы в вашем примере.Я добавил шаблонную привязку, которая исправляет эту проблему для вас.Теперь у границы в вашем шаблоне всегда будет фон, определенный в вашем стиле, установленный с помощью триггеров или непосредственно установленный в XAML.

ОБРАТИТЕ ВНИМАНИЕ: Если вы устанавливаете цвет в XAML с помощью <Button Background="Pink"/> это перезапишет атрибуты стиля и триггера.

Попробуйте это произведение искусства:

enter image description here

<Button Content="Hello there!"
    MaxWidth="180"
    Margin="5"
    DockPanel.Dock="Top"
    Padding="5"
    FontSize="12"
    Foreground="#1261AC"
    FontWeight="SemiBold"
    BorderBrush="Transparent">
<Button.Style>
    <Style TargetType="Button">
        <Setter Property="Background" Value="HotPink"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border CornerRadius="5" Background="{TemplateBinding Background}" BorderThickness="1" Padding="5">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="Red" />
                <Setter Property="Background" Value="Lime" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Button.Style>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...