2010-10-14 76 views
0

我必须创建一个自定义样式的按钮。问题是,虽然我改变了一切时,鼠标悬停或当它有焦点它获得原来的颜色! 试图设置FocusVisualStyle="{x:Null}"但它一直这样做....风格的WPF按钮问题

<Button Content="Button" Height="143" Margin="85,76,190,0" VerticalAlignment="Top" FocusVisualStyle="{x:Null}" Background="#FFE9D7D7"/> 

我可以做什么?

回答

1

默认按钮模板是重写您的样式。所以你有克里特你自己的按钮控制模板。这是一个例子。

<Style x:Key="InformButton" TargetType="Button"> 
     <Setter Property="OverridesDefaultStyle" Value="True"/> 
     <Setter Property="Margin" Value="2"/> 
     <Setter Property="FontFamily" Value="Verdana"/> 
     <Setter Property="FontSize" Value="11px"/> 
     <Setter Property="FontWeight" Value="Bold"/> 
     <!--<Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisual}" />--> 
     <Setter Property="Background" > 
      <Setter.Value> 
       <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" > 
        <GradientStop Color="#FFFFD190" Offset="0.2"/> 
        <GradientStop Color="Orange" Offset="0.85"/> 
        <GradientStop Color="#FFFFD190" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border Name="border" 
      BorderThickness="1" 
      Padding="4,2" 
      BorderBrush="DarkGray" 
      CornerRadius="3" 
      Background="{TemplateBinding Background}"> 
         <Grid > 
          <ContentPresenter HorizontalAlignment="Center" 
          VerticalAlignment="Center" Name="contentShadow" 
       > 
           <ContentPresenter.RenderTransform> 
            <TranslateTransform X="1.0" Y="1.0" /> 
           </ContentPresenter.RenderTransform> 
          </ContentPresenter> 
          <ContentPresenter HorizontalAlignment="Center" 
         VerticalAlignment="Center" Name="content"/> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" /> 
          <Setter Property="Foreground" Value="#FF4788c8" /> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Background" > 
           <Setter.Value> 
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" > 
             <GradientStop Color="#FFFFD190" Offset="0.35"/> 
             <GradientStop Color="Orange" Offset="0.95"/> 
             <GradientStop Color="#FFFFD190" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter TargetName="content" Property="RenderTransform" > 
           <Setter.Value> 
            <TranslateTransform Y="1.0" /> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
         <Trigger Property="IsDefaulted" Value="True"> 
          <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" /> 
         </Trigger> 
         <Trigger Property="IsFocused" Value="True"> 
          <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" /> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter TargetName="border" Property="Opacity" Value="0.7" /> 
          <Setter Property="Foreground" Value="Gray" /> 
         </Trigger> 

        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
3

您看到的视觉效果可能来自默认控件模板,其中包含窗口镶边。您可能想尝试为该按钮创建一个自定义模板,该模板将为您提供对视觉元素的完全控制。

1

即使您定义了自定义样式,如果您未将自定义样式设置为自定义样式,该按钮仍会继承默认样式的某些属性。所以,你有两个选择:

  • 设置OverridesDefaultStyletrue上的按钮,以便它不继承默认样式
  • 设置背景/边框/前景刷明确的自定义样式