2010-10-14 4 views
0

Je dois créer un bouton de style personnalisé. Le problème est que, bien que je change tout quand je le souris ou quand il a le focus, il obtient les couleurs d'origine! a essayé de mettre FocusVisualStyle="{x:Null}" mais il continue de le faire ....Problème de bouton WPF avec le style

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

Que puis-je faire?

Répondre

1

Le modèle de bouton par défaut est le remplacement de votre style. donc vous avez crete votre propre modèle de contrôle pour le bouton. Voici un exemple.

<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

Les visuels que vous voyez peuvent provenir du modèle de contrôle par défaut, qui inclut le chrome de la fenêtre. Vous pouvez essayer de créer un modèle personnalisé pour le bouton, qui vous donnera des contrôles complets des éléments visuels.

1

Même si vous avez défini un style personnalisé, le bouton hérite toujours de certaines propriétés du style par défaut si vous ne les avez pas définies dans votre style personnalisé. Donc, vous avez deux options:

  • mis OverridesDefaultStyle à true sur le bouton afin qu'il ne hérite pas le style par défaut
  • définir l'arrière-plan/frontière/brosses de premier plan explicitement dans le style personnalisé