WPF Problème d'effet sur un bouton

Résolu/Fermé
robunccm Messages postés 52 Date d'inscription jeudi 7 février 2019 Statut Membre Dernière intervention 9 mars 2024 - 12 févr. 2019 à 13:41
robunccm Messages postés 52 Date d'inscription jeudi 7 février 2019 Statut Membre Dernière intervention 9 mars 2024 - 13 févr. 2019 à 20:16
Bonjour, à tous
mon soucis est visuel, je souhaite faire un changement de couleur sur click d'un bouton le programme ci-dessous fonctionne
        private void BtnAvant_Click(object sender, RoutedEventArgs e)
        {
            if (btnAvant.Background == Brushes.YellowGreen)
            {   btnAvant.Background = Brushes.Orange;   }
            else
            {   btnAvant.Background = Brushes.YellowGreen;  }
        }

et dans XAML j'ai
        <Button x:Name="btnAvant" Content="AVANT" HorizontalAlignment="Left" Height="24" Margin="120,39,0,0" VerticalAlignment="Top" Width="65" Click="BtnAvant_Click" />


ce qui me gène est que le bouton ne change de couleur que lorsque je quitte le bouton et également cet effet de clignotement donnant l'impression que l'action n'est pas prise en compte. Comment obtenir un effet similaire à WinForm ?

Merci de votre aide
Configuration: Windows / Chrome 72.0.3626.96

3 réponses

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
12 févr. 2019 à 20:58
Bonsoir,

voici la réponse d'un collègue trop timide pour la poster lui-même.
Il faut écrire un style pour le bouton. Tu peux le stocker dans les window ressources, dans un fichier de style ou directement dans le bouton.

Ici c'est dans les window ressources
<Window x:Class="Test_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:def="Definition"
        xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
        xmlns:s="clr-namespace:System;assembly=mscorlib"
        
        Title="MainWindow" Height="719" Width="694">
    <Window.Resources>
        <Style x:Key="styleBouton" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="Border"  CornerRadius="2"  BorderThickness="1" Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" BorderBrush="#404040">
                            <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>


Et plus loin
        <Button Name="button" Content="Mon bouton" Style="{StaticResource styleBouton}" Background="Orange" Height="20" Width="100" Click="Button_Click"/>

1
robunccm Messages postés 52 Date d'inscription jeudi 7 février 2019 Statut Membre Dernière intervention 9 mars 2024 1
12 févr. 2019 à 21:32
Merci Whismeril pour cette réponse aussi efficace qu’intéressante même si tu en partage la paternité.
Je suis passé en WPF suite à tes remarques dans un autre sujet et au début de lecture de tes tutos.
Je progresse dans l'approche objet et particulièrement en évitant de sollicités des contrôles distants.
La transcription de mon application est en bonne voie, énormément de code en moins, plus de performances et plus de lisibilité. XAML me plait bien j'ai une petite expérience en HTML et CSS cela m'aide. Le plus dur c'est WPF car des choses très simples hier sont aujourd'hui bien plus sophistiquées et nécessitent un gros apprentissage.
Nul doute que je vous solliciterai à nouveau je dis vous mais je pourrai dire tu car c'est chaque fois toi qui me répond.
Dernier point j'ai renoncé, pour l'instant aux contrôles utilisateur, car il me génèrent des impossibilités de création assez déroutante, mais lorsque je lance l'application elle a l'air de fonctionner, à suivre.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
13 févr. 2019 à 08:09
Quelle version de Visual Studio utilise tu ?
1
robunccm Messages postés 52 Date d'inscription jeudi 7 février 2019 Statut Membre Dernière intervention 9 mars 2024 1
13 févr. 2019 à 09:25
VS Community 2017 V15.9.5
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
13 févr. 2019 à 12:47
Ok, Community est gratuit, il bugue plus que les vetsion pro ou entreprise.

Quand tu ajoutes des controles (même des contrôles Framework), des converters, etc... Il arrives que VS te signale que ça n’existe pas, ça compile quand même et le programme fonctionne.

Mais ça n’est pas pratique car, il peut y avoir des erreurs partout et parfois la fenêtre ne s’affiche pas en mode design.

Ça vient d’un problème de cache, la solution préconisée par Microsoft, est de nettoyer la solution (j’ai pas VS sous les yeux ça doit être dans le menu générer), puis de régénérer la solution.
Ça ne marche pas à tous les coups.

La solution qui marche est de fermer VS, supprimer le dossier obj, et dans le dossier bin supprimer tous les fichiers générés par ton projet (si tu n’as que ça supprime bin, si tu as des fichiers de données, des dll que tu as mises à la main etc.. faut faire le tri). Ensuite tu relances VS, tu régénères et la normalement c’est bon.
1
robunccm Messages postés 52 Date d'inscription jeudi 7 février 2019 Statut Membre Dernière intervention 9 mars 2024 1
13 févr. 2019 à 20:16
Merci bien J'essayerai une autre fois pour l'instant je fais des Window c'est assez souple ....
0