【问题标题】:Background is changing in Mouse_Leave but not in Mouse_Enter背景在 Mouse_Leave 中改变,但在 Mouse_Enter 中没有改变
【发布时间】:2018-05-07 20:50:28
【问题描述】:

我刚刚进入 WPF。我有两个事件处理程序:

private void Mouse_Enter(object sender, MouseEventArgs e)
{
    ((Button)sender).Background = Brushes.Red;
}
private void Mouse_Leave(object sender, MouseEventArgs e)
{
    ((Button)sender).Background = Brushes.Black;
}

当鼠标进入按钮区域时,什么也没有发生。但是,当离开按钮区域时,按钮会变黑。我在Mouse_Enter 里面放了一个断点,它确实在执行该方法,只是不改变背景颜色。

如何解决?谢谢!

【问题讨论】:

  • 当您的鼠标进入时,您的按钮颜色是否会变为默认的“按钮悬停”颜色?
  • @Fleury26 是的。
  • 如果它不需要在 c# 代码中并且可以在 XAML 中,我建议查看this answer
  • 重新设置按钮的样式不仅仅是覆盖背景颜色。默认模板可以找到here on msdn

标签: c# wpf xaml


【解决方案1】:

发生这种情况是因为默认按钮模板中有一个“内置”触发器导致按钮忽略您在 MouseEnter 事件中更改其背景的尝试,您需要先编辑模板并禁用触发器,请按以下步骤操作:

在 Visual Studio 编辑器中,右键单击您的按钮并选择“编辑模板”,然后选择“编辑副本...”为您的样式命名任何您想要的样式,并通过 XAML 查找名为“IsMouseOver”的触发器并删除 2下面的行。

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsDefaulted" Value="true">
                            <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
    --- Delete this line    <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
    --- Delete this line    <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="true">

【讨论】:

  • 非常感谢,但我真的很想使用代码隐藏。当然不是为了生产目的,而只是为了学习。您能否解释一下在不使用 XAML 触发器的情况下如何修复它?再次感谢!
猜你喜欢
  • 2013-09-26
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
相关资源
最近更新 更多