2010-04-27 60 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

相关问题