2010-04-27 77 views
1

我有一個簡單的問題。使用IsPressed觸發器,我希望能夠將按鈕的背景顏色設置爲默認灰色以外的其他顏色。這裏是按鈕看起來如果沒有按它
alt text爲什麼當IsPressed爲true時按鈕背景默認爲灰色

喜歡什麼,這裏是個什麼樣子點擊
alt text

下面是按鈕觸發時等等。我知道觸發器是正確觸發的,因爲點擊時按鈕邊緣的發光效果。我也知道這個筆刷是正確的,因爲我試着將它作爲背景畫筆來看看它的樣子。

<Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="{DynamicResource ButtonHoverBrush}"/> 
      <Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/> 
     </Trigger> 
     <!-- This is the trigger which is working but the background color wont change --> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/> 
      <Setter Property="Background" Value="{DynamicResource ButtonPressedBrush}" /> 
     </Trigger> 
    </Style.Triggers> 

以下是整個樣式,如您所見,它是應用於應用程序中所有按鈕的默認樣式。

<Style TargetType="Button"> 
    <Setter Property="Background" Value="{DynamicResource ButtonBrush}" /> 
    <Setter Property="Foreground" Value="Black" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="{DynamicResource ButtonHoverBrush}"/> 
      <Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/> 
      <Setter Property="Background" Value="{DynamicResource ButtonPressedBrush}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

這裏是最終的解決方案(感謝所有誰幫助)

  1. 創建一個通用按鈕控件模板,並做一些數據綁定:

    <ControlTemplate TargetType ="Button" x:Key="ButtonControlTemplate"> 
        <Border Background="{TemplateBinding Background}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          CornerRadius="3"> 
         <Grid> 
          <ContentPresenter ContentSource="{TemplateBinding Content}" 
               ContentTemplate="{TemplateBinding ContentTemplate}" 
               VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
               HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
         </Grid>   
        </Border> 
    </ControlTemplate> 
    
  2. 將控件樣式添加到樣式中:

    <Style TargetType="Button"> 
        <Setter Property="Background" Value="{DynamicResource ButtonBrush}" /> 
        <Setter Property="Foreground" Value="Black" /> 
        <Setter Property="Template" Value="{DynamicResource ButtonControlTemplate}" /> 
        <Setter Property="BorderThickness" Value="1" /> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="{DynamicResource ButtonHoverBrush}"/> 
          <Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/> 
          <Setter Property="Background" Value="{DynamicResource ButtonPressedBrush}" /> 
         </Trigger> 
        </Style.Triggers> 
    </Style> 
    

注:了borderThickness,缺省爲1,否則它不顯示

+0

你能分享模板XAML嗎? – 2010-04-27 03:46:50

+0

它不是模板的一部分,它是風格的一部分。我已經添加了完整的樣式,讓你看看 – TerrorAustralis 2010-04-27 06:58:40

+0

我認爲Kishore意味着刷子 – benPearce 2010-04-27 07:08:52

回答

1

問題在於Windows的默認控件模板XP主題月神。如果您將顯示屬性中的主題更改爲經典,則您的樣式將起作用。

應該可以覆蓋wpf中的系統顏色,但是我還沒有能夠解決您的問題,可能顏色被凍結,因此無法更改或創建特定於主題的類看,ButtonChrome,壞了。

我認爲你最好的選擇是製作你自己的按鈕控制模板。

+0

我會放棄這一點,我不願爲按鈕製作一個控件模板,因爲這個樣式是我的所有按鈕的通用屬性。我會去一趟 – TerrorAustralis 2010-04-27 22:32:34

+0

謝謝隊友!它很好地工作。我控制模板按鈕,現在我的背景變化點擊 – TerrorAustralis 2010-04-27 22:43:40

+0

如果你害怕應用自己的模板,因爲擔心缺少任何必要的部分。然後嘗試使用Microsoft Expression Blend爲不同的控件提取樣式和控件模板。 – Domokun 2010-07-16 05:05:49

相關問題