[英]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.