7

マウスを上に置くと黒くなる赤いボタンが必要です。

    <Button Content="Hover me" Grid.Column="3" Grid.Row="3">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background" Value="Red"/>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Black"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

ただし、私の問題は、ボタンの上にカーソルを合わせると、グラデーション グレーの外観を持つ既定の Windows スタイルに変わることです。

4

1 に答える 1

19

それを試してみてください

<Window.Resources>
    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Red"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <ContentPresenter x:Name="PART_Content"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          TextElement.Foreground="{TemplateBinding Foreground}"></ContentPresenter>                        </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Black"/>
                <Setter Property="Foreground" Value="White"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

次のようにカスタムスタイルを適用します

<Button Content="Hover me" Style="{StaticResource MyButtonStyle}" Height="30" Width="100"/>

その理由は、ボタンのデフォルトの Aero スタイルにあります。ControlTemplate で定義されたクロムがあり、さまざまなマウス イベントで独自の動作をします。そのため、トリガー呼び出しを上書きします。

したがって、希望する結果を得るには、Button のデフォルトの ControlTemplate をオーバーライドする必要があります。

于 2013-07-20T05:51:25.760 に答える