WPF:在鼠标左键上改变边框的背景颜色

时间:2010-02-05 15:57:53

标签: c# wpf background triggers mouseevent

下面是我在应用程序中用于按钮的样式。现在,当用户用鼠标左键单击按钮时,我正在尝试更改名称为Border的{​​{1}}元素的背景颜色。

我该怎么做?

"Background"

2 个答案:

答案 0 :(得分:17)

您只需要以下属性触发器:

            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" TargetName="Background" Value="Red"/>
                </Trigger>
            </ControlTemplate.Triggers>

答案 1 :(得分:4)

您需要一个EventTrigger

给一个或两个Border的GradientStops一个名字(不是你的Trigger中的名字):

<GradientStop Color="#f1f1f1" Offset="1" x:Name="Stop2" />

并将以下EventTrigger添加到ControlTemplate.Triggers:

<EventTrigger RoutedEvent="Button.Click">
  <EventTrigger.Actions>
    <BeginStoryboard>
      <Storyboard>
        <ColorAnimation Storyboard.TargetName="Stop2" Storyboard.TargetProperty="Color" To="Red" Duration="0" />
      </Storyboard>
    </BeginStoryboard>
  </EventTrigger.Actions>
</EventTrigger>

如果你想修改两个渐变色块,请务必给它们一个名字,并分别对每个渐变色块执行ColorAnimation(我想你可以在同一个故事板中同时进行)

希望它有所帮助!

编辑:这将使Click事件的更改成为永久性(我使用VS 2010 Beta 2进行了测试,而Button.MouseLeftButtonDown不起作用,但Button.Click仅适用于鼠标左键按下而不适用鼠标右键)。如果您只希望在鼠标停止时进行更改...但是当按钮不再按下时返回正常值...那么您应该使用另一个答案中提到的IsPressed属性触发器。