none
changer le background d'un bouton lors du survol en wpf RRS feed

  • Question

  • bonjour,je souhaite savoir comment changer le background d'un contrôle button lorsqu'on le survole à travers un code C#.A vrai dire je ne retrouve pas l’événement MouseOver de Winform en WPF.Voici ce que j'ai pu faire mais ça ne marche pas. 

            if(btnEmploiTem.IsMouseOver==true)
    
          {
    
                //LinearGradientBrush degrader = new LinearGradientBrush();
                //degrader.StartPoint = new Point(0.5, 0);
                //degrader.EndPoint = new Point(0.5, 1);
                //couleur=(Color)(ColorConverter.ConvertFromString("#FF3A3C3A"));
                //degrader.GradientStops.Add(new GradientStop(couleur,0.673));
                //couleur = (Color)ColorConverter.ConvertFromString("#FF868984");
                //degrader.GradientStops.Add(new GradientStop(couleur, 0));
                //btnEmploiTem.Background = degrader;
         }
    
     


    forum ms89


    samedi 16 novembre 2013 10:13

Réponses

  • Bonjour,

    Au temps pour moi... Il faut modifier le ControlTemplate de votre contrôle pour pouvoir changer le comportement par défaut du bouton lors de son survol :

    <Button Content="Button" HorizontalAlignment="Left" Margin="134,125,0,0" VerticalAlignment="Top" Width="154" Height="97">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background" Value="Green"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Yellow"/>
                    </Trigger>
                </Style.Triggers>
    
            </Style>
        </Button.Style>
    </Button>

    La version C# si vous souhaitez perdre votre temps (à la faire dans le constructeur de votre fenêtre) :

    FrameworkElementFactory templateFactory;
    templateFactory = new FrameworkElementFactory(typeof(Border));
    templateFactory.SetValue(Border.BackgroundProperty, new TemplateBindingExtension(Border.BackgroundProperty));
    
    this.myButton.Style = new Style()
    {
        TargetType = typeof(Button),
        Setters =
        {
            new Setter() { Property = Button.BackgroundProperty, Value = Brushes.Green },
            new Setter()
            {
                Property = Button.TemplateProperty,
                Value = new ControlTemplate()
                {
                    TargetType = typeof(Button),
                    VisualTree = templateFactory
                }
            }
        },
        Triggers =
        {
            new Trigger()
            {
                Property = Button.IsMouseOverProperty,
                Value = true,
                Setters = 
                {
                        new Setter() { Property = Button.BackgroundProperty, Value = Brushes.Yellow },
                }
            }
        }
    };

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure


    dimanche 17 novembre 2013 23:42
    Modérateur

Toutes les réponses

  • Bonjour,

    La force de WPF pour le design d'application et de déclarer (via le XAML) à quoi doit ressembler le look de votre application au lieu de le programmer (en C#).

    Voilà un exemple de code XAML qui permet de changer la couleur de bouton du vert au jaune :

    <Button Content="Button" HorizontalAlignment="Left" Margin="134,125,0,0" VerticalAlignment="Top" Width="154" Height="97">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background" Value="Green" />
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Yellow" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse Claver amon lundi 18 novembre 2013 00:00
    • Non marqué comme réponse Claver amon lundi 18 novembre 2013 00:00
    dimanche 17 novembre 2013 16:12
    Modérateur
  • Bonsoir,j'ai bien essayé votre code mais ça ne marche pas, même un copier-coller.

    C'est toujours la couleur par défaut qui apparait lors du survol et non le yellow que vous avez indiquer meme après avoir changer la couleur.

    Peut-on faire cela à travers le code behind?


    forum ms89

    dimanche 17 novembre 2013 21:26
  • Bonjour,

    Au temps pour moi... Il faut modifier le ControlTemplate de votre contrôle pour pouvoir changer le comportement par défaut du bouton lors de son survol :

    <Button Content="Button" HorizontalAlignment="Left" Margin="134,125,0,0" VerticalAlignment="Top" Width="154" Height="97">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background" Value="Green"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Yellow"/>
                    </Trigger>
                </Style.Triggers>
    
            </Style>
        </Button.Style>
    </Button>

    La version C# si vous souhaitez perdre votre temps (à la faire dans le constructeur de votre fenêtre) :

    FrameworkElementFactory templateFactory;
    templateFactory = new FrameworkElementFactory(typeof(Border));
    templateFactory.SetValue(Border.BackgroundProperty, new TemplateBindingExtension(Border.BackgroundProperty));
    
    this.myButton.Style = new Style()
    {
        TargetType = typeof(Button),
        Setters =
        {
            new Setter() { Property = Button.BackgroundProperty, Value = Brushes.Green },
            new Setter()
            {
                Property = Button.TemplateProperty,
                Value = new ControlTemplate()
                {
                    TargetType = typeof(Button),
                    VisualTree = templateFactory
                }
            }
        },
        Triggers =
        {
            new Trigger()
            {
                Property = Button.IsMouseOverProperty,
                Value = true,
                Setters = 
                {
                        new Setter() { Property = Button.BackgroundProperty, Value = Brushes.Yellow },
                }
            }
        }
    };

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure


    dimanche 17 novembre 2013 23:42
    Modérateur