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 :

Dependency property and custom controls


Sujet :

Silverlight

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut Dependency property and custom controls
    Bonjour
    Voila j'ai un petit soucis avec les accesseurs des dependency property, en faite j'aimerais rendre une des classes internal, le problème est que si je rends la classe internal j'ai l'erreur suivante
    Impossible de créer un 'System.Windows.DependencyProperty' à partir du texte 'Template'.
    Sachant que je peux pas modifier les accesseurs de la DP est ce quelqu'un connait un moyen pour rendre ma classe internal malgré le fait qu'elle aient des DP ?
    Voila 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
    je n'ai pas de problème particulier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        internal class Toto : Control
        {
            public int MyProperty
            {
                get { return (int)GetValue(MyPropertyProperty); }
                set { SetValue(MyPropertyProperty, value); }
            }
     
            // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty MyPropertyProperty =
                DependencyProperty.Register("MyProperty", typeof(int), typeof(Toto), null);
        }
    Ta propriété Template est-elle bien de type ContentTemplate ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Ma propriété est de type ControlTemplate, est ce que sur ta classe Toto t'a un visuel de créer ?

    J'ai oublié de préciser une chose, j'ai un TemplateBinding sur ma DP dans le visuel et l'erreur me conduit dans le Xaml donc je pense que c'est important

  4. #4
    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
    Après quelques tests, il s'avère que XAML ne peut instancier des classes internal. En revanche, l'ajout en CodeBehind ne pose pas de problème.

    Les DP ne sont apparement pas impliquées dans le problème.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Hmmm ben si vu que pour mes autres contrôles qui ont pas de DP j'arrive a les mettre en internal avec le constructeur également en internal et aucun problème de link avec le XAML sa fonctionne sans soucis

  6. #6
    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
    Bizarre, moi je crée une classe héritant de Control :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        internal class Toto : Control
        {
        }
    A l'exécution si elle et dans le code XAML j'ai une exception de parse (AG_E_PARSER_BAD_TYPE)

    dès que je passe la classe en public plus de problème.

    la classe Toto et le XAML sont, bien sur, dans la même DLL.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Bizarre comme tu dis , vérifie que t'es pas une erreur de syntaxe parce que c'est l'erreur que j'ai quand j'ai mal écrit un truc ou avec un copier coller malencontreux et merci pour ton intérêt au topic

  8. #8
    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
    vérifie que t'es pas une erreur de syntaxe parce que c'est l'erreur que j'ai quand j'ai mal écrit un truc ou avec un copier coller malencontreux
    Tu penses bien que j'avais vérifié puisque en public cela passe nickel

    A mon avis c'est lié à la reflexion effectué dans XAML qui ne prend en compte que les objets publiques et non internals.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Citation Envoyé par Samoteph Voir le message
    A mon avis c'est lié à la reflexion effectué dans XAML qui ne prend en compte que les objets publiques et non internals.
    Le fait est que sa marche chez moi en internal tant qu'il y'a pas de DP

  10. #10
    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
    tu es en en SL4 ? moi je suis en SL3 pour le test.
    Peux-tu me montrer ton code ?

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Je suis effectivement en SL 4,pour le code je vais mettre des bouts lisible je l'espère je peux pas vraiment montrer tout le source :

    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
    internal class TimePart : PartControl
        {
            internal TimePart()
            {
                DefaultStyleKey = typeof(TimePart);
            }
     
     
            protected override void RefreshStates(bool useTransition)
            {
                        VisualStateManager.GoToState(this, IsSelected ? VisualStates.StateSelected : VisualStates.StateUnselected, useTransition);
     
                VisualStateManager.GoToState(this, IsMouseOver ? VisualStates.StateMouseOver : VisualStates.StateNormal, useTransition);
     
            }
        }
    }
    PartControl est juste une asbtract class qui hérite de Control et qui ajoute quelques abstract property & methods

    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
     
        /// <summary>
        /// Base class for all the visual parts representing a DatetimeRange
        /// </summary>
        internal abstract class PartControl : Control
        {
            private DateTimeRange _dateRange;    
     
            private bool _isSelected;
     
            internal DateTimeRange DateRange
            {
                get { return _dateRange; }
                set
                {
                    if (_dateRange == value) return; _dateRange = value;
                }
            }
     
            internal bool IsSelected
            {
                get
                {
                    return _isSelected;
                }
                set
                {
                    if (value == _isSelected) return;
                    _isSelected = value;
                    RefreshStates(true);
                }
            }
     
            internal PartContainer ParentPartContainer { get; set; }
     
            internal int Index { get; set; }
     
            protected abstract void RefreshStates(bool useTransitions);
     
    etc .....
    et XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     xmlns:local="clr-namespace:FSControls"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Style TargetType="local:TimePart">
        	<Setter Property="Template">
        		<Setter.Value>
        			<ControlTemplate TargetType="local:TimePart">
    etc ....
    Je précise que j'ai fait le test en utilisant directement Control aucun problème

  12. #12
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Le XAML ne supporte pas les contrôles internal.
    La réponse qu'on trouve sur le forum SL est : "This is by design".

    Tu n'as plus qu'à rendre ton contrôle public

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Y'a un soucis la j'ai pas hacké mon silverlight sa fonctionne chez moi tant qu'il y'a pas de DP ......

    Le topic du forum silverlight date de 2008 il y a eu des évolutions je pense depuis

  14. #14
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par DaMo` Voir le message
    Y'a un soucis la j'ai pas hacké mon silverlight sa fonctionne chez moi tant qu'il y'a pas de DP ......

    Le topic du forum silverlight date de 2008 il y a eu des évolutions je pense depuis
    Ben vu que ton code ne fonctionne pas je dirais que non

Discussions similaires

  1. [C#] custom control à partir d'une image / alpha blending
    Par Cyberwan dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/11/2005, 21h59
  2. Insertion d'un Custom Control: CMyListBox
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 21/06/2005, 15h26
  3. [C#] Custom Control : Recuperer valeur formulaire
    Par victorbru dans le forum ASP.NET
    Réponses: 22
    Dernier message: 21/04/2005, 09h02
  4. [C#] Custom Control et message de confirmation
    Par lancelot69 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/12/2004, 15h04

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