Comment voulez-vous modifier l'arrière-plan pour un Bouton de la Souris dans WPF?
J'ai un bouton sur ma page avec ce code XAML:
<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Bottom"
Width="50" Height="50" HorizontalContentAlignment="Left"
BorderBrush="{x:Null}" Foreground="{x:Null}" Margin="50,0,0,0">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Green"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Mais quand je mets la souris sur mon bouton, bouton de fond passe à windows par défaut sur fond gris.
Quel est Le Problème?
C'est le bouton de l'image avant et après le passage de la souris:
Avant:
Après:
- Mais vous devez commencer à l'image
Forward-48.png
et de déclencher IsMouseOver de le changer pour le mêmeForward-48.png
. Je suis en train d'utiliser votre code avec des images différentes et j'ai tout a bien fonctionné. - ne fonctionne pas.
- Après est votre couleur par défaut? Nulle part ailleurs vous ne changez pas / ne pas définir un arrière-plan du bouton? - Je avoir votre code fonctionne très bien.
Vous devez vous connecter pour publier un commentaire.
Pour supprimer la valeur par défaut
MouseOver
sur le comportement desButton
vous devrez modifier leControlTemplate
. La modification de votreStyle
définition de ce qui suit devrait faire l'affaire:EDIT: C'est un quelques années de retard, mais vous êtes réellement en mesure de définir la frontière de la brosse à l'intérieur de la frontière de ce qui est là. Idk si cela a été souligné, mais il ne semble pas comme il était...
ControlTemplate
, de sorte qu'ils remplacent OPStyle
déclencheurs.ControlTemplate
dit en gros " Paint frontière, conformément à laBackground
couleur. Et si la souris est sur le bouton - de la peinture qui sont en bordure de cette couleur à la place", tandis que dans le style, vous avez seulement accès à laBackground
couleur, et de ne pas sous-jacentes de la couleur de la bordure. Je vous vois point si, de style WPF laisse beaucoup à désirer...Toutes les réponses jusqu'à présent sont complètement remplacer le bouton par défaut de comportement avec quelque chose d'autre. Cependant, à mon humble avis il est utile et important de comprendre qu'il est possible de changer juste la partie que vous vous souciez d', par l'édition de l'existant, le modèle par défaut pour un élément XAML.
Dans le cas de traiter avec l'effet hover sur un WPF bouton, le changement dans l'apparence, dans un WPF
Button
élément est causée par unTrigger
dans le style par défaut de laButton
, qui est basée sur laIsMouseOver
de propriété et fixe leBackground
etBorderBrush
propriétés de haut niveauBorder
élément dans le modèle de contrôle. LeButton
de l'élément d'arrière-plan est en dessous de laBorder
de l'élément d'arrière-plan, de sorte que la modification de laButton.Background
propriété n'empêche pas le hover effet d'être vu.Avec un peu d'effort, vous pouvez remplacer ce comportement avec votre propre setter, mais parce que l'élément que vous devez affecter est dans le modèle et ne sont pas directement accessibles dans votre XAML, cette approche serait difficile et à mon humble avis trop complexe.
Une autre option serait d'utiliser le graphique comme
Content
pour laButton
plutôt que de laBackground
. Si vous avez besoin de plus de contenu sur le graphique, vous pouvez les combiner avec unGrid
que l'objet de plus haut niveau dans le contenu.Toutefois, si vous avez littéralement veux juste désactiver l'effet hover entièrement (plutôt que de les cacher), vous pouvez utiliser Visual Studio Concepteur XAML:
<Trigger Property="IsMouseOver" Value="true">...</Trigger>
élément. Bien sûr, vous pouvez modifier le modèle que vous voulez à ce point.Lorsque vous avez terminé, le bouton style de ressembler à quelque chose comme ceci:
(Remarque: vous pouvez omettre le
p:
espace de noms XML qualifications dans le code...je vous les fournir ici seulement parce que le Dépassement de Pile XML formateur de code devient confus par<Style/>
éléments qui n'ont pas de nom complet avec espace de noms XML.)Si vous souhaitez appliquer le même style à d'autres boutons, vous pouvez faire un clic droit et de choisir "Modifier le Modèle/Appliquer la Ressource" et sélectionnez le style que vous venez d'ajouter pour le premier bouton. Vous pouvez même faire style que le style par défaut pour tous les boutons, utilisant les techniques de l'application d'un style par défaut pour les éléments dans le code XAML.
Cela a bien fonctionné pour moi.
Style De Bouton
Bouton
Notes
Stroke
couleur sur le vol stationnaire de laBorder
ainsi, sans qu'il ne planant au-dessus de laPath
?Veux juste partager mon style de bouton de mon ResourceDictionary que j'ai utilisé.
Vous pouvez changer librement le onHover fond dans le style des déclencheurs.
"ColorAnimation À = *de votre choix BG(j'.e #FFCEF7A0)". Le bouton BG sera également automatiquement revenir à son origine BG après le passage de la souris de l'état.Vous pouvez même définir la façon dont rapidement la transition.
Dictionnaire De Ressources
tout ce que vous avez à faire est d'appeler le style.
Exemple De Mise En Œuvre
Une légère plus difficile de répondre à cette utilise ControlTemplate et a un effet d'animation
(adapté de https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/customizing-the-appearance-of-an-existing-control)
Dans votre dictionnaire de ressources, de définir un modèle de contrôle de votre bouton comme celui-ci:
dans votre XAML, vous pouvez utiliser le modèle ci-dessus pour votre bouton comme ci-dessous:
Définir votre bouton
Espère que cela aide
Pour changer de style de bouton
1er: définir les styles de ressource
2ème bouton définir le code
3ème code derrière