1

我对 WPF 相当陌生,我正在尝试制作一个自定义按钮,当您将鼠标悬停在它上面时它会更改为另一种指定的颜色。我已经取得了部分成功;唯一的问题是只有按钮的底部才会真正触发颜色变化。

红色突出显示的区域是近似的碰撞箱。(不是红色长条,那只是装饰)

在此处输入图像描述

<!-- Button Markup-->
<Button Margin="4,0,4,0" >
    <Image Source="{StaticResource closeImg}"></Image>
</Button>

<!-- Button style -->

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="#FF2B2B2B"/>
    <Setter Property="HorizontalAlignment" Value="Right"/>
    <Setter Property="Width" Value="28px"/>
    <Setter Property="Height" Value="28px"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>
4

2 回答 2

2

我发现这是带有 WPF 和 WindowChrome 类的调试功能的一个小问题。通过在样式中添加以下内容可以解决此问题:

<Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True"></Setter>
于 2018-10-31T15:38:55.397 回答
0

你的解决方案对我来说似乎很好。我在我的vs上尝试过同样的事情,一切似乎都很好。也许还有其他东西与包含这些按钮的容器相关联,或者可能与图像本身相关联。您可以尝试在 controlTemplate 内设置边框的名称并在触发器内设置 TargetName 吗?想知道这是否有帮助

<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="#FF2B2B2B"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="Width" Value="28px"/>
<Setter Property="Height" Value="28px"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border x:Name="Bd" Background="{TemplateBinding Background}">
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="Bd" Property="Background" Value="Red"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>

于 2018-10-31T14:40:53.420 回答