2013-07-20 63 views
4

我想要一個紅色的按鈕,當鼠標懸停在它上面時會變黑。WPF觸發器按照原樣工作

<Button Content="Hover me" Grid.Column="3" Grid.Row="3"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Background" Value="Red"/> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Black"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 

但是,我的問題是,當我將鼠標懸停在按鈕上時,它將變成具有漸變灰色外觀的默認Windows樣式。

回答

11

試試吧

<Window.Resources> 
    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="Red"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}"> 
         <ContentPresenter x:Name="PART_Content" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              TextElement.Foreground="{TemplateBinding Foreground}"></ContentPresenter>      </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="Black"/> 
       <Setter Property="Foreground" Value="White"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

和應用自定義樣式如下

<Button Content="Hover me" Style="{StaticResource MyButtonStyle}" Height="30" Width="100"/> 

原因是按鈕的默認航空風格。它在ControlTemplate中定義了一個chrome,它在各種鼠標事件上擁有自己的行爲。所以那寫你的觸發器調用。

因此,您必須重寫Button的默認ControlTemplate以獲得您想要的結果。

+2

我一直在尋找小時,這個作品謝謝你! 但是,必須有更好的方法 - 在Hoover上使用多行代替簡單的Trigger作爲背景顏色會很好。而不是那個可怕的ControlTemplate。這樣一個小事件的代碼太多;( – Terning