【问题标题】:How to stop default WPF from overriding mouse hover function?如何阻止默认 WPF 覆盖鼠标悬停功能?
【发布时间】:2018-01-30 13:38:33
【问题描述】:

在我的 C# WPF 应用程序中,我有 3 个按钮,每个按钮都在 MainWindow 构造函数中的 InitializeComponent() 函数之后分配了图像画笔背景。 当我将鼠标悬停在每个按钮上时,它们会变成纯蓝色。我想我需要为每个按钮添加 MouseEnter 方法,以及 MouseLeave 方法。悬停时将按钮更改为较暗的版本。

但图像在悬停时仍会变成蓝色...请参阅 MP4 了解说明

https://i.gyazo.com/06d936daaf5153c369b2b9af2faa1a9f.mp4

谢谢

J

【问题讨论】:

  • 您不能覆盖按钮模板。看到它here
  • 如果是列表视图,您可以禁用列表视图上的选择或使用 ItemsControl
  • 无需更改代码。正如 Stefan 所说,您只需要定义一个自定义模板。默认模板根据按钮的状态更改背景,并且仅在其处于“正常”状态时才考虑背景。按照他提供的链接作为示例。
  • @Stefan 我看不出您链接帖子的哪一部分与代码无关?

标签: c# wpf user-interface


【解决方案1】:

您可以在 Buttons 上使用以下 Style 来实现所需的结果,如果您需要在鼠标悬停时使用其他颜色,只需更改下面触发器中的边框前景属性,如果不想要任何鼠标悬停效果,只需将前景更改为透明

<Style TargetType="Button">
     <Setter Property="OverridesDefaultStyle" Value="True"/>               
     <Setter Property="Template">
           <Setter.Value>
                   <ControlTemplate TargetType="Button">
                       <Border Name="border" 
                        BorderThickness="1"
                        Padding="4,2" 
                        BorderBrush="DarkGray" 
                        CornerRadius="3" 
                        Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                      </Border>
                <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="True">
              <Setter TargetName="border" Property="Background" Value="Blue" />
                         </Trigger>
             </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
       </Setter>
   </Style>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多