[英]Getting buttons to change background color when left mouse button is down and you hover over them
[英]WPF: Change background color of border on left mouse button down
下面是我在应用程序中用于按钮的样式。 现在,当用户用鼠标左键单击按钮时,我尝试更改名称为"Background"
的Border
元素的背景颜色。
我怎么做?
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="#6e6964" BorderThickness="1" CornerRadius="1" Margin="{TemplateBinding Margin}" SnapsToDevicePixels="True">
<Border BorderBrush="White" BorderThickness="1" CornerRadius="1" SnapsToDevicePixels="True">
<Border Padding="12,4,12,4" SnapsToDevicePixels="True" Name="Background">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="#f1f1f1" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="0" Color="#edf8fb"/>
<GradientStop Offset="1" Color="#e2edf0"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您只需要以下属性触发器:
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="Background" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
你需要一个 EventTrigger
为 Border 的 GradientStops 中的一个或两个命名(不是触发器中的名称):
<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 属性触发器,如另一个答案中所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.