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 :

Contrôle perso ne s'affiche pas dans le designer


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut Contrôle perso ne s'affiche pas dans le designer
    Salut,

    J'ai créé un contrôle perso hérité de ListView, je l'ai ajouté dans une fenêtre, mais le designer me sort une erreur qui l'empêche d'afficher la fenêtre si elle contient ce contrôle L'erreur est la suivante, sans plus de détails :
    Could not create an instance of type 'ScalableListView'
    Je ne comprends pas trop ce qui ne va pas... mon contrôle n'a pourtant rien de particulier il me semble, le code est le suivant :
    Code C# : 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
    public class ScalableListView : ListView
    {
        public ScalableListView()
        {
            this.ItemContainerStyle = App.Current.Resources["stlItemContainer"] as Style;
            this.Template = App.Current.Resources["tplWrapListView"] as ControlTemplate;
        }
     
        public double Zoom
        {
            get { return (double)GetValue(ZoomProperty); }
            set { SetValue(ZoomProperty, value); }
        }
     
        public static readonly DependencyProperty ZoomProperty =
                DependencyProperty.Register(
                "Zoom",
                typeof(double),
                typeof(ScalableListView),
                new UIPropertyMetadata(1.0));
     
    }

    J'attends vos idées

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bon, apparemment ce qui pose problème, c'est les propriétés que je définis dans le constructeur... on ne doit pas pouvoir faire App.Current en mode design
    J'ai trouvé une astuce :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ScalableListView()
    {
        bool designMode = System.ComponentModel.DesignerProperties.GetIsInDesignMode(this);
        if (!designMode)
        {
            this.ItemContainerStyle = App.Current.Resources["stlItemContainer"] as Style;
            this.Template = App.Current.Resources["tplWrapListView"] as ControlTemplate;
        }
    }
    L'inconvénient, c'est que je ne vois pas l'apparence réelle de mon contrôle dans le designer, mais bon...

    Quand on définit le template dans le XAML, ça fonctionne bien, mais dans mon cas il n'y a pas de XAML puisque j'hérite directement d'un contrôle existant. Est-ce qu'il n'y a pas un moyen d'obtenir le même comportement par le code ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Le mettre dans l'évènement Loaded corrige peut-être aussi le problème. Mais le designer ne le prendra pas en compte non plus, j'imagine
    D'ailleurs tous ce qui est défini dans le code c# ne doit pas être pris en compte par le designer, non ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par binoo Voir le message
    D'ailleurs tous ce qui est défini dans le code c# ne doit pas être pris en compte par le designer, non ?
    Ben le constructeur au moins est exécuté pour instancier le contrôle

    En fait ce que je voudrais c'est que ça se comporte comme si j'avais défini les propriétés dans le XAML avec {StaticResource bidule}, mais je ne sais pas comment faire ça par le code. D'ailleurs ce n'est peut-être pas possible, c'est peut-être le designer lui-même qui interprète StaticResource pour aller chercher la ressource au bon endroit...

  5. #5
    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
    Par défaut
    Citation Envoyé par binoo Voir le message
    Le mettre dans l'évènement Loaded corrige peut-être aussi le problème. Mais le designer ne le prendra pas en compte non plus, j'imagine
    Normalement si car, après tout, dans le designer, le contrôle est instancié (donc l'évent Loaded survient)

    @tomlev: Déjà, vérifie que App.Current.Resources["XXX"] n'est pas null et te renvoit bien ton style

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    @tomlev: Déjà, vérifie que App.Current.Resources["XXX"] n'est pas null et te renvoit bien ton style
    Ca marche quand j'exécute le programme, donc a priori ça ne renvoie pas null (du moins à l'exécution). Mais quand le contrôle s'affiche dans le designer, je ne peux pas débugger pour voir ce qui se passe

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/11/2005, 15h38
  2. Icone ne s'affichant pas dans la barre de titre
    Par Spartan03 dans le forum Windows
    Réponses: 22
    Dernier message: 05/11/2005, 14h57
  3. [CSS][IE]background d'affiche pas dans div sur IE
    Par Thomzz dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/09/2005, 23h32
  4. Noms des colonnes ne s'affichent pas dans un JTable
    Par Bourdet dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/07/2005, 15h26
  5. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42

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