2015-11-01 195 views
0

我試圖在鼠標懸停在按鈕上時更改默認邊框顏色,但無法使其工作。我以爲這會工作正常,但顯然它不:
<Button> <Button.Resources> <Color x:Key="ControlMouseOverColor">somecolor</Color> </Button.Resources> </Button>
有沒有辦法做到這一點?鼠標懸停按鈕時無法更改邊框顏色

回答

0

正常的解決方案,這是WPF屬性觸發器:

<Button> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="BorderBrush" Value="Black"></Setter> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="BorderBrush" Value="Red"></Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 

屬性觸發器的設計,當條件爲真才反應過來,不過當條件爲假恢復其原來的狀態。所以我們在這裏說:當IsMouseOver屬性成爲true時,將定義的按鈕的邊框刷設置爲紅色。當條件變爲假時,它會變回黑色(我不確定邊界畫筆的默認顏色是什麼,因此您可以刪除第4行)

+0

我不相信這會工作,因爲ControlTemplate的觸發器優先。 – Rowbear

1

這是您需要執行的其中一種情況在WPF中完成一些簡單的事情有點複雜:)。實際上,您需要覆蓋Button控件的ControlTemplate,因爲鼠標位於按鈕上方時的邊框顏色由默認的ControlTemplate確定。下面是一個帶有默認CotrolTemplate的按鈕,減去IsMouseOver setter設置爲紅色:

<Button> 
     <Button.Template> 
      <ControlTemplate TargetType="{x:Type ButtonBase}"> 
       <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
        <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Button.IsDefaulted" Value="True"> 
         <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/> 
         <Setter Property="BorderBrush" TargetName="border" Value="Red"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/> 
         <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/> 
        </Trigger> 
        <Trigger Property="ToggleButton.IsChecked" Value="True"> 
         <Setter Property="Background" TargetName="border" Value="#FFBCDDEE"/> 
         <Setter Property="BorderBrush" TargetName="border" Value="#FF245A83"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/> 
         <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/> 
         <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Button.Template> 
     Click 
    </Button> 
相關問題