簡體   English   中英

WPF:更改鼠標左鍵下邊框的背景顏色

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM