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

Silverlight Discussion :

Création d'un UserControl


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut Création d'un UserControl
    Bonjour,

    Je souhaite ajouter un comportement spécifique SpecialControl_Changed à plusieurs Control : Button, RadioButton, TextBlock, etc...
    Ce comportement nécessite que le Control soit contenu dans une Grid.
    Une propriété MyProperty est accessible à tous ces Control.

    Je n'ai pour l'instant pas trouvé de conception satisfaisante.
    Voici celle que j'ai conçue pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public interface ISpecialControl
    {
       object MyProperty{ get; set; }
     
       void SpecialControl_Changed(object sender, EventArgs e);
    }
     
    public class SpecialTextBox : TextBox, ISpecialControl {...}
    Cette solution ne me satisfait pas car mon contrôle n'est pas inclus dans une Grid.
    J'essaie alors créer ma classe de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class SpecialTextBox : UserControl, ISpecialControl 
    {
       private Grid myGrid;
     
       private TextBox myTextBox;
    }

    J'aimerai plutôt créer une classe abstraite SpecialControl qui hérite de Grid. Puis les classes filles contiendraient le Control de base (Button, TextBox, ...) et son comportement.

    Je n'arrive pas à mettre en place cette solution car ma classe SpecialControl n'est pas reconnue dans le xaml de ma classe fille.

    Est ce que ma solution à base de classe abstraite vous parait bonne. Si oui, comment faire pour hériter de son propre UserControl?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Par défaut
    Le mieux serait d'encapsuler ta Grid dans un UserControl, nommons le SpecialGrid.

    Ensuite dans cette SpecialGrid, tu exposes une ObservableCollection de FrameworkElement.

    Quand la collection change, tu check que le control ajouter est bien un TextBox, RadioButton, etc... et si c'est le cas, tu t'abonnes à l'event TextChanged, Checked, UnChecked, etc... en fonction du type de control.

    Au sein de chacun de ces handlers tu pourras déclencher un event propre à SpecialGrid qui s'appellera SpecialControl_Changed et dont le paramètre sender sera setté à la valeur du contrôle déclenchant l'event.

    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
    public partial class SpecialGrid : UserControl
    {
        public SpecialGrid()
        {
            InitializeComponent();
     
            SpecialControls.CollectionChanged += SpecialControls_CollectionChanged;
        }
     
        public ObservableCollection<FrameworkElement> SpecialControls { get; set; }
        public event EventHandler SpecialControlChanged;
     
        private void SpecialControls_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
            {
                foreach (object item in e.NewItems)
                {
                    if (item is  TextBox)
                        ((TextBox)item).TextChanged += item_TextChanged;
                    else if (item is CheckBox)
                        ((CheckBox)item).Checked += item_Checked;
                }
            }
        }
     
        private void OnSpecialControlChanged(FrameworkElement fe)
        {
            if (SpecialControlChanged != null)
                SpecialControlChanged(fe, new EventArgs());
        }
     
        private void item_Checked(object sender, RoutedEventArgs e)
        {
            OnSpecialControlChanged((FrameworkElement)sender);
        }
     
        private void item_TextChanged(object sender, TextChangedEventArgs e)
        {
            OnSpecialControlChanged((FrameworkElement)sender);
        }
     
    }
    PS: Je n'ai pas écrit ici le code permettant de disposer les différents sous-contrôles.


    ------------------------
    Blog : Silverlight News

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut
    Merci de ta réponse tucod.
    Je ne pense pas avoir besoin d'une gestion si "dynamique" de mes contrôles.

    Cela dit, tu m'as donné l'idée de faire autrement. Pourquoi s'embêter avec du xaml alors que je devrais pouvoir faire sans?
    J'explore cette piste et donne des nouvelles dès que ça fonctionne.

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

Discussions similaires

  1. Création d'un usercontrol pour windows form sous VB.NET Express 2010
    Par patte d'ours dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/06/2014, 14h38
  2. création d'une dll usercontrol
    Par TERRIBLE dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 10/05/2009, 14h36
  3. problème création usercontrol persnnalisé
    Par jabaka dans le forum C#
    Réponses: 1
    Dernier message: 27/04/2009, 09h43
  4. création de usercontrol C# VS2008
    Par enoli dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/02/2009, 12h30

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