删除 WPF 按钮的鼠标悬停效果

本文关键字:悬停 鼠标 WPF 按钮 删除 | 更新日期: 2023-09-27 17:57:12

我找不到这个问题的简单答案。

我在 WPF 中创建了一个Button,并为其提供了背景图像。首先我的问题是边框,但后来我能够用

Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"

现在的问题是窗口MouseOver效果是可见的。有没有简单的方法可以消除它?我试图用Image替换Value.它有效,但我无法再在按钮上设置Text

<Button x:Name="gameBtnAnswer1" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" Cursor="Hand" Padding="-4" Margin="0,0,18,0" Height="38" Width="336" HorizontalAlignment="Left" FontSize="16" Foreground="White" Click="gameBtnAnswer1_Click" BorderThickness="0" Focusable="False">
    <Button.Background>
        <ImageBrush ImageSource="themes/blue/button_answer.png" Stretch="None" TileMode="Tile"/>
    </Button.Background>
    <Button.Content>
        Hier steht die Antwort #1
    </Button.Content>
</Button>

删除 WPF 按钮的鼠标悬停效果

在我看来,最好的方法是重新定义按钮 ControlTemplate。这里是 msdn 文档。

没有触发器的示例模板:

<Style TargetType="Button">
  <Setter Property="SnapsToDevicePixels" Value="true"/>
  <Setter Property="OverridesDefaultStyle" Value="true"/>
  <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
  <Setter Property="MinHeight" Value="23"/>
  <Setter Property="MinWidth" Value="75"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border 
          x:Name="Border"  
          CornerRadius="2" 
          BorderThickness="1"
          Background="{StaticResource NormalBrush}"
          BorderBrush="{StaticResource NormalBorderBrush}">
          <ContentPresenter 
            Margin="2"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            RecognizesAccessKey="True"/>
        </Border>
        <ControlTemplate.Triggers>


        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

首先想到的是重新设计按钮的模板。在模板中,您将看到具有许多状态的 VisualStateManager 类。其中一个状态是鼠标悬停。在该 MouseOver 声明中,您可以放置任何您想要使按钮看起来像您喜欢的方式。例如,该 VisualStateManager 中还应该有一些默认的视觉状态,因此您只需将默认视觉状态的描述复制到鼠标悬停视觉状态,它们将是相同的。