2010-07-28 9 views
1

J'avais auparavant windows xp et le réglage de l'arrière-plan du bouton wpf a toujours fonctionné, mais depuis Windows 7, l'arrière-plan est toujours défini sur bleu. Comment pourrais-je résoudre ce problème?Fond de bouton WPF dans Windows 7

Répondre

2

Vous aurez probablement besoin de créer votre propre modèle pour les boutons. (Je suppose que c'est juste la couleur du survol avec laquelle vous vous battez, pas la couleur de base, qui suit la propriété Arrière-plan).

Voici un modèle de bouton très simple, qui pourrait vous aider à démarrer. BackBrush et ForeBrush auront besoin d'un réglage approprié. (Et ils sont le dos et Fore du reste de l'application, donc ils regardent en arrière dans cet exemple)

<Style TargetType="{x:Type Button}"> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="ClickMode" Value="Press"/> 
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"/> 
    <Setter Property="BorderBrush" Value="#e9dbae" /> 
    <Setter Property="Foreground" Value="{StaticResource BackBrush}" /> 
    <Setter Property="Background" Value="{StaticResource ForeBrush}" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ButtonBase}"> 
        <Border 
        x:Name="Border" 
        Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 

         BorderThickness="2" 
        CornerRadius="2" 
         SnapsToDevicePixels="False" 
        RenderTransformOrigin="0.5,0.5" 
        TextBlock.Foreground="{TemplateBinding Foreground}" > 
         <ContentPresenter 
         Margin="2" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         /> 
        </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter TargetName="Border" Property="RenderTransform"> 
          <Setter.Value> 
           <ScaleTransform ScaleX="0.975" ScaleY="0.975" /> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="#999999"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

la propriété « OverridesDefaultStyle » a en partie, maintenant j'ai seul problème avec IsMouseOver. l'arrière-plan change pendant une fraction de seconde puis redevient bleu. – Sys

1

Pour jouer avec Backgrounds Ajouter à Window.Resources (ou toute autre application ResourceDictionary) ce style:

<Style TargetType="Button"> 
      <Setter Property="Background" Value="Black"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="Moccasin"/> 
       </Trigger> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="Background" Value="Red"/> 
       </Trigger> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter Property="Background" Value="Gray"/> 
       </Trigger>     
      </Style.Triggers> 
     </Style> 

Cela fonctionne si vous n'avez pas besoin de redéfinir modèle de bouton (aspect géométrique du bouton). Ici, nous ne spécifions pas Style x:Key alors ce style sera appliqué à tous les boutons dans la portée de ressources spécifiée. Pour spécifier les styles avec différentes apparences, vous devez chaque marque de style avec x:Key="StyleName" puis dans le bouton Définir un style Style="{DynamicResource StyleName}" ou Style="{DynamicResource StyleName}"