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] UserControl help !


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [WPF] UserControl help !
    Bonjour à tous,

    je voudrais faire une sorte de UserControl Container un peu comme les grids / StackPanel ... Je voudrais entre autre pouvoir ajouter des composants à l'intérieur du mien, tout les UserControl que j'ai fais jusqu'à présent, je ne pouvais rien rajouter dedans ! Entre autre je voudrais que mon control réagisse de la manières suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            <Desktop:AnimatedCircle Grid.Column="0" Grid.Row="1" >
                <Button Width="50" Height="50" />
                <Button Width="50" Height="50" />
                <Button Width="50" Height="50" />
                <Button Width="50" Height="50" />
                <Button Width="50" Height="50" />
            </Desktop:AnimatedCircle>
    Ce qui aurait un rendu de tel sorte :



    Si quelqu'un savait comment procéder juste pour faire un StackPanel je m'occuperais de possitionner les contrôles sur un cercle.

    Merci d'avance.

    Cordialement,
    NeoKript

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    C'est exactement ca que je cherchais ! Merci j'ai juste modifier pour que ca soit un cercle et non une ellipse.

    Merci encore !

    Au passage j'ai quelque soucis avec un contrôle de rating que j'ai fais,
    la note s'affiche bien progressivement quand la souris passe dessus les images.
    Quand je clique je vérouille bien la note, cependant quand je bind en xaml la note Mark="{Binding Note}" tant que le controle n'a pas eu le focus au moins une fois, aucune note ne s'affiche et je ne vois pas ou est le problème. Si vous pouviez m'aider !

    Voici mon code :

    .xaml
    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
    29
    30
    31
     
    <UserControl x:Class="Desktop.UserControls.Rank"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Img="clr-namespace:Desktop.UserControls"
        Height="26" Width="140">
        <UserControl.Resources>
            <Img:Converter_NumberMark x:Key="Converter1" />
            <Img:Converter_MarkVisibility x:Key="Converter2" />
        </UserControl.Resources>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10" />
                <ColumnDefinition Width="26" />
                <ColumnDefinition Width="26" />
                <ColumnDefinition Width="26" />
                <ColumnDefinition Width="26" />
                <ColumnDefinition Width="26" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="26" />
            </Grid.RowDefinitions>
            <Img:ImageType Width="10" Height="26" Grid.Row="0" Grid.Column="0" Source="../Ressources/Rank/Empty.png" Number="0"  MouseEnter="ImageType_MouseEnter" MouseLeave="ImageType_MouseLeave" MouseLeftButtonDown="ImageType_MouseLeftButtonDown" />
            <Img:ImageType Width="26" Height="26" Grid.Row="0" Grid.Column="1" Source="../Ressources/Rank/Rank.png" Number="1" MouseEnter="ImageType_MouseEnter" MouseLeave="ImageType_MouseLeave" MouseLeftButtonDown="ImageType_MouseLeftButtonDown" Opacity="{Binding CurrentMark, Converter={StaticResource Converter1}, ConverterParameter=1}" />
            <Img:ImageType Width="26" Height="26" Grid.Row="0" Grid.Column="2" Source="../Ressources/Rank/Rank.png" Number="2" MouseEnter="ImageType_MouseEnter" MouseLeave="ImageType_MouseLeave" MouseLeftButtonDown="ImageType_MouseLeftButtonDown" Opacity="{Binding CurrentMark, Converter={StaticResource Converter1}, ConverterParameter=2}" />
            <Img:ImageType Width="26" Height="26" Grid.Row="0" Grid.Column="3" Source="../Ressources/Rank/Rank.png" Number="3" MouseEnter="ImageType_MouseEnter" MouseLeave="ImageType_MouseLeave" MouseLeftButtonDown="ImageType_MouseLeftButtonDown" Opacity="{Binding CurrentMark, Converter={StaticResource Converter1}, ConverterParameter=3}" />
            <Img:ImageType Width="26" Height="26" Grid.Row="0" Grid.Column="4" Source="../Ressources/Rank/Rank.png" Number="4" MouseEnter="ImageType_MouseEnter" MouseLeave="ImageType_MouseLeave" MouseLeftButtonDown="ImageType_MouseLeftButtonDown" Opacity="{Binding CurrentMark, Converter={StaticResource Converter1}, ConverterParameter=4}" />
            <Img:ImageType Width="26" Height="26" Grid.Row="0" Grid.Column="5" Source="../Ressources/Rank/Rank.png" Number="5" MouseEnter="ImageType_MouseEnter" MouseLeave="ImageType_MouseLeave" MouseLeftButtonDown="ImageType_MouseLeftButtonDown" Opacity="{Binding CurrentMark, Converter={StaticResource Converter1}, ConverterParameter=5}" />
            <TextBlock Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="5" Text="Pas de note" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" FontSize="15" Visibility="{Binding Mark, Converter={StaticResource Converter2}}" />
        </Grid>
    </UserControl>
    .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
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace Desktop.UserControls
    {
        /// <summary>
        /// Logique d'interaction pour Rank.xaml
        /// </summary>
        public partial class Rank : UserControl
        {
    #region Constructeur
            public Rank()
            {
                InitializeComponent();
                this.DataContext = this;
                this.Loaded += new RoutedEventHandler(Rank_Loaded);
            }
            void Rank_Loaded(object sender, RoutedEventArgs e)
            {
                this.CurrentMark = this.Mark;
            }
            #endregion
            #region DependencyProperty
            public static DependencyProperty CurrentMarkProperty = DependencyProperty.Register("CurrentMark", typeof(Int32), typeof(Rank));
            public Int32 CurrentMark
            {
                get { return (Int32)(this.GetValue(CurrentMarkProperty)); }
                set
                {
                    this.SetValue(CurrentMarkProperty, (Int32)value);
     
                }
            }
            public static DependencyProperty MarkProperty = DependencyProperty.Register("Mark", typeof(Int32), typeof(Rank));
            public Int32 Mark
            {
                get { return (Int32)(this.GetValue(MarkProperty)); }
                set { 
                    this.SetValue(MarkProperty, (Int32)value);
     
                }
            }
            #endregion
     
            private void ImageType_MouseEnter(object sender, MouseEventArgs e)
            {
                if (this.IsEnabled)
                {
                    ImageType Img = sender as ImageType;
                    this.CurrentMark = Img.Number;
                }
     
            }
     
            private void ImageType_MouseLeave(object sender, MouseEventArgs e)
            {
                if (this.IsEnabled)
                {
                    this.CurrentMark = this.Mark;
                }
            }
     
            private void ImageType_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                if (this.IsEnabled)
                {
                    this.Mark = this.CurrentMark;
                }
            }
     
        }
     
        public class ImageType : Image
        {
            public Int32 Number
            {
                get;
                set;
            }
        }
     
        class Converter_MarkVisibility : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                Int32 Mark = (Int32)value;
                if (Mark == -1)
                    return (Visibility.Visible);
                return (Visibility.Hidden);
     
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
        class Converter_NumberMark : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                Int32 Mark = (Int32)value;
                Int32 Number = System.Convert.ToInt32(parameter);
                if (Mark >= Number)
                    return (1);
                return (0.3);
     
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }
    Merci d'avance

  4. #4
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    Au passage j'ai quelque soucis avec un contrôle de rating que j'ai fais,
    la note s'affiche bien progressivement quand la souris passe dessus les images.
    Quand je clique je vérouille bien la note, cependant quand je bind en xaml la note Mark="{Binding Note}" tant que le controle n'a pas eu le focus au moins une fois, aucune note ne s'affiche et je ne vois pas ou est le problème
    Aucune note ne s'affiche ou ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    En gros quand je fais dans mon control Mark="3" là ya bien les 3 étoiles mais si je bind mark sur le SelectedIndex d'un combobox ca ne fonctionne pas.

  6. #6
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    En gros quand je fais dans mon control Mark="3" là ya bien les 3 étoiles mais si je bind mark sur le SelectedIndex d'un combobox ca ne fonctionne pas.
    Même si il y a bien 4 items dans ta combobox ?

    D'ailleurs, c'est pas plutôt selectedValue que tu devrais binder ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    Même si il y a bien 4 items dans ta combobox ?

    D'ailleurs, c'est pas plutôt selectedValue que tu devrais binder ?
    SelectedValue ou SelectedIndex ça revient au même dans mon cas. index -1 pas de note, et puis après 0,1,2,3,4,5 les notes les index sont les mêmes mais en effet ca serait plus propre de binder sur SelectedValue.

    En debug, La dependancyProperty Mark de mon contrôle à bien la bonne valeur cependant l'affichage n'indique pas cela.

    Merci

  8. #8
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    En debug, La dependancyProperty Mark de mon contrôle à bien la bonne valeur cependant l'affichage n'indique pas cela.
    Pas d'erreurs dans la fenêtre d'Output ?
    Tu peux nous donner le code utilisé ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Non pas d'erreur particulière, sauf de fonctionnement ^^

    Alors voici le code de test qui contient mon contrôle :
    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
     
    <StackPanel>
                <Button Click="Button_Click" >
                    Coucou
                </Button>
                <Test:Rank x:Name="R" Mark="{Binding SelectedIndex}" />
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Note Final :" Margin="2" Foreground="White" FontWeight="Bold" />
                    <TextBlock Name="T" Margin="2" Text="{Binding Mark}" Foreground="White"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Note Courant :" Margin="2" Foreground="White" FontWeight="Bold" />
                    <TextBlock Name="N" Margin="2" Text="{Binding CurrentMark}" Foreground="White"/>
                </StackPanel>
                <ComboBox Name="HI" Width="100">
                    <ComboBoxItem>0</ComboBoxItem>
                    <ComboBoxItem>1</ComboBoxItem>
                    <ComboBoxItem>2</ComboBoxItem>
                    <ComboBoxItem>3</ComboBoxItem>
                    <ComboBoxItem>4</ComboBoxItem>
                    <ComboBoxItem>5</ComboBoxItem>
                </ComboBox>
            </StackPanel>
    Mon contrôle rank c'est le code que j'ai donné plus haut !

    Voila, merci d'avance

  10. #10
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Tu n'indiques pas au binding ou aller chercher la propriété SelectedIndex (ie. la source du binding).

    Utilise ce bout de code et cela ira mieux ^^*
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <Test:Rank x:Name="R" Mark="{Binding SelectedIndex, ElementName=HI}" />


    PS: rappel sur les bindings : Google > Feuille de synthèse sur les bindings en WPF

  11. #11
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    Tu n'indiques pas au binding ou aller chercher la propriété SelectedIndex.

    Utilise ce bout de code et cela ira mieux ^^*
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <Test:Rank x:Name="R" Mark="{Binding SelectedIndex, ElementName=HI}" />


    PS: rappel sur les bindings : Google > Feuille de synthèse sur les bindings en WPF
    J'avais oublier le bout de code .cs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
               this.T.DataContext = this.R;
                this.N.DataContext = this.R;
                this.R.DataContext = this.HI;
    Donc le binding passe bien

  12. #12
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Je préférerais quand même le binding avec ElementName...

    Et si tu passes en TwoWay ?

  13. #13
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    Je préférerais quand même le binding avec ElementName...

    Et si tu passes en TwoWay ?
    Ça ne fonctionne plus, je n'ai plus le fonctionnement désiré :s

  14. #14
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Et si tu met le binding sur la combobox à la place ?

  15. #15
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    il y a un article très intéressant sur le binding en WPF
    http://www.e-naxos.com/DnlManager.as...ID=102&Lang=FR

  16. #16
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Pas mieux, mon j'ai trouver un code qui fais la même chose que ce que je voulais faire je vais le prendre en attendant de trouver la solution que je chercherais quand j'aurai bien avancé mon projet ! Merci encore pour ton aide !

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

Discussions similaires

  1. [C# WPF] Usercontrol button supprimer
    Par luc648 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 06/06/2010, 17h40
  2. [WPF] UserControl et Click
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 27/03/2010, 17h54
  3. [WPF] UserControl -> binding ??
    Par UNi[FR] dans le forum C#
    Réponses: 1
    Dernier message: 10/09/2007, 11h31
  4. [WPF] UserControl pour un historique de nav
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 10/09/2007, 11h19
  5. [WPF] UserControl: impossible à ajouter à la toolbox
    Par SoBaKa dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 23/05/2007, 09h14

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