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

C# Discussion :

WPF et C# : Créer une image Bouton où on peut changer l'image dynamiquement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut WPF et C# : Créer une image Bouton où on peut changer l'image dynamiquement
    Bonjour,

    J'aurai besoin de votre aide car j'arrive pas à trouver mon erreur.

    Je cherche à créer un bouton où on peut changer l'image de manière dynamique. Le but est de pouvoir réutiliser ce model pour tous les boutons de l'application et donc juste de passer les images qui sert pour le Background du bouton en paramètre. Il y a une image pour le bouton normal et une autre pour le bouton Hover.

    Voici mon code qui ne fonctionne pas :

    Code xaml : 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
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:local="clr-namespace:Product_Configuration_Tool" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d">
     
    <ControlTemplate x:Key="Template1" TargetType="{x:Type Button}">
    <Grid Margin="{TemplateBinding Margin}">
    <Image x:Name="img" Source="{Binding local:ImageButton.NormalBackgroundImage, RelativeSource={RelativeSource TemplatedParent}}" Stretch="None"/>
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
    <ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
    <Setter TargetName="img" Property="Source" Value="{Binding local:ImageButton.MouseOverBackgroundImage, RelativeSource={RelativeSource TemplatedParent}}"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </ResourceDictionary>

    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
    26
    27
    28
    public static class ImageButton 
    {
            public static DependencyProperty NormalBackgroundImageProperty = DependencyProperty.Register(
             "NormalBackgroundImage", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(""));
     
            public static DependencyProperty MouseOverBackgroundImageProperty = DependencyProperty.Register(
                "MouseOverBackgroundImage", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(""));
     
            public static ImageSource GetNormalBackgroundImage(DependencyObject obj)
            {
                return (ImageSource)obj.GetValue(NormalBackgroundImageProperty);
            }
     
            public static void SetNormalBackgroundImage(DependencyObject obj, ImageSource value)
            {
                obj.SetValue(NormalBackgroundImageProperty, value);
            }
     
            public static ImageSource GetMouseOverBackgroundImage(DependencyObject obj)
            {
                return (ImageSource)obj.GetValue(MouseOverBackgroundImageProperty);
            }
     
            public static void SetMouseOverBackgroundImage(DependencyObject obj, ImageSource value)
            {
                obj.SetValue(MouseOverBackgroundImageProperty, value);
            }
    }
    La partie XAML

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button x:Name="BT_Cancel" Height="30"  Margin="0,0,385,15" Width="110" VerticalAlignment="Bottom" HorizontalAlignment="Right" Template="{StaticResource Template1}" local:ImageButton.NormalBackgroundImage="/Product_Configuration_Tool;component/Images/Btn/closeLightbox_btn.png" local:ImageButton.MouseOverBackgroundImage="/Product_Configuration_Tool;component/Images/Btn/closeLightbox_btn_hover.png" />

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Citation Envoyé par cecilia9 Voir le message
    Voici mon code qui ne fonctionne pas
    Pourrais-tu s'il te plaît faire un tout petit effort et décrire "ce qui ne fonctionne pas" ? Qu'est-ce que ton code est censé faire et qu'est-ce que tu as obtenu ?

    PS: J'ai du mal à comprendre pourquoi une classe "bouton" que tu veux réutiliser partout est déclarée en static!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Bonjour,

    Je cherche à faire un model de bouton où j'aurai juste à changer les images du bouton. Je n'arrive pas à trouver le binding qui permet de faire ça.

    Suis-je plus claire?

    Merci d'avance,

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Tu veux faire un UserControl WPF permettant de surcharger le comportement d'un bouton classique pour faire un ImageBouton.

    Donc il faut que tu fasses un UserControl.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    ça je sais, mon problème est que je n'arrive pas à trouver le binding qu'il faut pour changer les images j'y suis arrivé en pour l'image de départ mais je n'arrive pas à trouver le solution pour l'image Hover (lorsque l'on passe la souris dessus).

    Si tu préfères suivant les fenêtres les images changent (une croix pour le background du bouton close, un check pour le bouton valider...).

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/11/2014, 08h13
  2. WPF : Problème pour créer une fenetre parent/enfant simple
    Par Ranx62 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 01/04/2008, 02h39
  3. Réponses: 0
    Dernier message: 21/03/2008, 13h51
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46

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