IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

WPF - Modifier couleur bouton XAML dans le code-behind


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Par défaut WPF - Modifier couleur bouton XAML dans le code-behind
    Bonjour à tous,

    J'utilise Visual Studio C# où je développe une application WPF et depuis 3 jours je tourne en rond
    sur un problème qui me parait simple sur le papier mais que je ne parviens pas à solutionner.

    Dans le fichier XAML d'une fenêtre, je place un bouton dont je modifie l'apparence avec un ControlTemplate,
    dans ce ControlTemplate un Rectangle qui définie la couleur du Background.

    Fichier XAML :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <Window x:Class="ModifierCouleurBouton.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:ModifierCouleurBouton"
            mc:Ignorable="d"
            Title="MainWindow" Height="150" Width="250">
     
        <Window.Resources>
            <!-- *************************************** -->
            <!--  Control Template des Boutons           -->
            <!-- *************************************** -->
            <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
                <Grid x:Name="mainGrid"  RenderTransformOrigin="0.5,0.5">
                    <Grid.BitmapEffect>
                        <OuterGlowBitmapEffect GlowColor="DarkViolet" GlowSize="0" x:Name="glowEffect"/>
                    </Grid.BitmapEffect>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="0.4*"/>
                        <RowDefinition Height="0.6*"/>
                    </Grid.RowDefinitions>
     
                    <!-- Je veux modifier la couleur (Fill) dans le code-behind -->
                    <Rectangle x:Name="rectangleBackGround" 
                                   Grid.Row="0" 
                                   Grid.RowSpan="2" 
                                   RadiusX="9" 
                                   RadiusY="9" 
                                   Fill="DarkBlue">
                    </Rectangle>
     
                    <Rectangle Grid.Row="0" Margin="2,2,2,0" RadiusX="9" RadiusY="9">
                        <Rectangle.Fill>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                <LinearGradientBrush.GradientStops>
                                    <GradientStopCollection>
                                        <GradientStop Color="#ccffffff" Offset="0" />
                                        <GradientStop Color="#00ffffff" Offset="1" />
                                    </GradientStopCollection>
                                </LinearGradientBrush.GradientStops>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter Grid.Row="0" Grid.RowSpan="2" VerticalAlignment="center" HorizontalAlignment="center" TextElement.Foreground="White"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="RenderTransform" TargetName="mainGrid">
                            <Setter.Value>
                                <ScaleTransform ScaleX="0.9" ScaleY="0.9" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Fill" TargetName="rectangleBackGround">
                            <Setter.Value>
                                <LinearGradientBrush EndPoint="0.979,1.069" StartPoint="0.742,-0.931">
                                    <GradientStop Color="#FF4E2259" Offset="0.011"/>
                                    <GradientStop Color="#FF000000" Offset="1"/>
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation To="4" Duration="0:0:0.3"
                                            Storyboard.TargetName="glowEffect" 
                                            Storyboard.TargetProperty="GlowSize" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation To="0" Duration="0:0:0.1" 
                                            Storyboard.TargetName="glowEffect" 
                                            Storyboard.TargetProperty="GlowSize" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.ExitActions>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Window.Resources>
     
        <!-- ****************************************** -->
        <!--            Création du Bouton              -->  
        <!-- ****************************************** -->
        <Grid>
            <Button Name="btnOk" Width="80" Height="28"
                   Template="{StaticResource ButtonTemplate}" >
                Ok
            </Button>
        </Grid>
    </Window>


    Je cherche à modifier la propriété Fill du Rectangle dans le code-behind mais impossible de l'atteindre, j'ai donné
    à mon rectangle mais il reste invisible du fichier .cs.

    Fichier .CS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Shapes;
     
    namespace ModifierCouleurBouton
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
     
                // je peux accéder au bouton sans problème
                btnOk.Opacity = 25;
     
     
                // comment atteindre ici le <Rectangle> du <ControlTemplate>
                // pour modifier la couleur ?
            }
        }
    }
    Un grand Merci d'avance à ceux qui pourraient me sortir de la galère.
    Pipoul

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Pour pouvoir modifier facilement la couleur du rectangle, le mieux est de brancher la propriété Fill de celui-ci sur une propriété existante du bouton, et comme c'est ton Background, ça me parait tout désigné.
    Pour ce faire dans ton ControlTemplate tu fais :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <Rectangle x:Name="rectangleBackGround" 
                    Grid.Row="0" 
                    Grid.RowSpan="2" 
                    RadiusX="9" 
                    RadiusY="9" 
                    Fill="{TemplateBinding Background}">
    </Rectangle>

    Maintenant dans ton code, en modifiant btnOk.Background, tu modifie en réalité le Fill de ton rectangle.

    Bonne continuation.

  3. #3
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Par défaut
    Bonjour,

    Ça marche nickel-chrome, parfait !
    Encore un grand MERCI pour l'idée à laquelle je n'ai pas pensé.

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Juste par curiosité pourquoi tu veux modifier le bouton dans le "code behind" ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 196
    Par défaut
    J'utilise Visual Studio C# où je développe une application WPF et depuis 3 jours je tourne en rond
    Juste par curiosité pourquoi tu veux modifier le bouton dans le "code behind" ?
    A mon avis telbas commence le WPF et à longtemps fait du Winforms ... me trompe-je ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/03/2016, 19h32
  2. Réponses: 1
    Dernier message: 20/08/2009, 12h12
  3. Réponses: 1
    Dernier message: 06/11/2008, 13h02
  4. Bouton radio dans un code php
    Par NANOUSSA83 dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2008, 16h03
  5. Probleme bouton flash dans un code javascript
    Par caroen dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/11/2006, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo