2010-03-24 3 views
1

J'ai créé un contrôle personnalisé et souhaite créer un attribut (disponible dans la conception de Blend) qui offre une liste déroulante ou une liste déroulante. Le concepteur sélectionne alors l'une des options disponibles. Tout comme le combo "Curseur" dans l'onglet "Propriétés communes", sauf que je veux un contrôle total sur les éléments qui vont dans le combo. Les choix peuvent varier, donc je ne peux pas utiliser un "enum" codé en dur.Attribut de conception personnalisé pour WPF

Je sais qu'il est possible de déclarer les caractéristiques de conception comme ceci:

protected string mString; 
[Category("Common Properties")] 
[DisplayName("My Friendly Name")] 
public string MyFriendlyName 
{ 
    get { return mString; } 
    set { mString= value; } 
} 

Dans le cas ci-dessus, « Mon nom convivial » est juste une chaîne. L'utilisateur peut entrer ce qu'il veut.

protected Uri mPathname; 
[Category("Common Properties")] 
[DisplayName("Resource pathname")] 
public Uri MyResPathname 
{ 
    get { return mPathname; } 
    set { mPathname = value; } 
} 

Dans le cas ci-dessus, « chemin de ressources » a une zone de liste déroulante, mais la liste des articles sont traités par Blend.

Si j'utilise une énumération, le résultat est un combo contenant mes éléments, mais je ne peux pas modifier la liste d'éléments.

public enum MyChoices 
{ 
    Aaa, 
    Bbb 
} 

public class MyButton : Button 
{ 

    (...) 

    [Category("Common Properties")] 
    public MyChoices MyChoice 
    { 
    get { return (MyChoices)GetValue(MyChoiceProperty); } 
    set { SetValue(MyChoiceProperty, value); } 
    } 

    public static readonly DependencyProperty MyChoiceProperty = 
     DependencyProperty.Register("MyChoice", 
            typeof(MyChoices), 
            typeof(MyButton), 
            new UIPropertyMetadata(
              (MyChoices)MyChoices.Aaa, 
              OnMyChoiceChangedCallback)); 

} 

Dans l'exemple ci-dessus, les choix sont codés en dur dans le ENUM ...

Quelqu'un peut-il aider? Je suis sûr que c'est facile, je suis très proche mais maintenant je tourne en rond.

Répondre

0

Vous êtes probablement à la recherche de PropertyValueEditor.

Voici un Walkthrough: Implementing an Inline Value Editor.

+0

Je l'ai essayé et il fonctionne parfaitement comme annoncé pour Visual Studio, mais pas dans Blend (Microsoft Expression). Je lis encore des articles connexes pour voir comment faire la même chose dans Expression Blend. Si vous avez la réponse (vous semblez les avoir tous!) Faites-moi savoir, malgré tout, merci beaucoup pour votre aide. Je me rapproche ... – Seb

+0

Je n'ai pas beaucoup d'expérience avec Blend mais je vérifierais si l'assemblage était réellement chargé (déplacez également vos contrôles dans un assemblage séparé si vous les avez dans le même projet). – laktak

+1

C'est plus compliqué que prévu. Cependant, j'ai trouvé un article très solide sur ce sujet (je le passe en ce moment). Le voici, au cas où il serait utile à quiconque: http://blogs.silverlight.net/blogs/justinangel/archive/2008/11/17/silverlight-design-time-extensibility.aspx – Seb

Questions connexes