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 :

Template Control et DependencyProperty


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut Template Control et DependencyProperty
    Bonjour,

    J'essaye de créer des template controls. J'ai cependant un soucis et je ne sais pas trop comment le résoudre.

    Le but ici est de créer une textbox numérique. Ainsi j'aimerai pouvoir spécifier le nombre de chiffre de la partie entière et décimale. Pour cela j'ai créé des dependency properties. Voici les parties pertinentes de code.

    Generic.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        <Style TargetType="local:Test">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:Test">
                        <TextBox />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    Test.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static readonly DependencyProperty DecimalCountProperty =
                                                             DependencyProperty.Register("DecimalCount",
                                                             typeof(short), typeof(Test),
                                                             new PropertyMetadata((short)2));
     
            public short DecimalCount
            {
                get { return (short)GetValue(DecimalCountProperty); }
                set {SetValue(DecimalCountProperty, value);}         
            }
    Mon appel au control
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <myCustomsCtrl:Test Width="100" Height="23" DecimalCount="3"></myCustomsCtrl:Test>
    Mon soucis se passe à l’exécution. L'affectation DecimalCount="3" soulève une exception Impossible de créer un System.Int16 à partir du texte '3'.

    Comment faire pour que cette affectation DecimalCount="3" fonctionne?
    Avec les casts appropriés et en mettant la propriété DecimalCount de type Object, l'affectation fonctionne mais n'y a-t-il pas une autre solution?

    Merci

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Passer le type à int au lieu de short devrait résoudre ton problème je pense.

  3. #3
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    En int, ça va passer, effectivement. Et tu aurais la même exception avec long (int64).

    WPF est plus permissif, il fait les bonnes conversions, mais Silverlight est parfois plus caractériel.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut
    Merci à vous deux pour votre réponse ! En effet, en changeant le type le soucis disparaît.

    Par ailleurs, j'ai approfondis un peu mes recherches sur ce problème. Il est possible de le résoudre en implémentant notre propre Converter.
    Voici un exemple si certains rencontrent le même problème

    Le converter
    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
     
    public class CustomDecimalConverter : TypeConverter
        {
            public override Object ConvertFrom(ITypeDescriptorContext context,CultureInfo culture,Object value) {
     
                try
                {
                    return System.Convert.ToDecimal(value);
                }
                catch (Exception)
                {
                    return null;
                }
            }
     
            public override bool CanConvertFrom(ITypeDescriptorContext context,Type sourceType)
            {
                if (sourceType == typeof(string))
                    return true;
                else
                    return base.CanConvertFrom(context, sourceType);
            }
        }
    Qu'on applique à la propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [TypeConverter(typeof(CustomDecimalConverter))]
            public decimal DecimalCount
            {
                get { return (decimal)GetValue(DecimalCountProperty); }
                set { SetValue(DecimalCountProperty, value); }
            }

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

Discussions similaires

  1. Template, Control et instance
    Par CaptainChoc dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/08/2011, 11h33
  2. Ou trouver un item " Silverlight Templated Control "
    Par Golzinne dans le forum Silverlight
    Réponses: 0
    Dernier message: 22/05/2011, 23h30
  3. Template control : Problème de PostBack
    Par Worldofdada dans le forum ASP.NET
    Réponses: 4
    Dernier message: 04/03/2009, 17h27
  4. Template control : LabeledDoubleCheckBox
    Par blowdesign dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 03/11/2008, 15h29
  5. Réponses: 4
    Dernier message: 10/11/2006, 15h33

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