0

Je crée un contrôle de menu pour l'infrastructure compacte. Le contrôle a une collection d'éléments. Je peux ajouter des éléments en utilisant le concepteur visuel de studio, cependant, ils ne sont jamais ajoutés au dossier de concepteur et donc la prochaine fois que j'ouvre le concepteur ou construisons la solution le menu n'a plus aucun article.Contrôle personnalisé de l'infrastructure compacte avec collecte non sauvegardée

Voici le code pour l'article:

public class Item 
{ 
    public int ImageIndex { get; set; } 

    private string _text = ""; 
    public string Text 
    { 
     get { return _text ?? ""; } 
     set { _text = value ?? ""; } 
    } 

    public string Name { get; set; } 
} 

Voici le code correspondant pour le menu:

public class ItemMenu : Control 
{ 
    public ItemMenu() 
    { 
     Columns = 4; 
     RowHeight = 64; 
     ColumnWidth = 64; 
     _items.ListChanged += new ListChangedEventHandler(_items_ListChanged); 
    } 

    private BindingList<Item> _items = new BindingList<Item>(); 
    public BindingList<Item> Items 
    { 
     get { return _items; } 
    } 

    public ImageList NormalImages { get; set; } 
    public ImageList SelectedImages { get; set; } 

    public int Columns { get; set; } 
    public int RowHeight { get; set; } 
    public int ColumnWidth { get; set; } 
    public int Rows 
    { 
     get { return (int)Math.Ceiling((double)Items.Count/(double)Columns); } 
    } 

    private void _items_ListChanged(object sender, ListChangedEventArgs e) 
    { 
     Refresh(); 
    } 
} 

Est-ce que quelqu'un sait comment je peux obtenir la collection d'articles pour sauver la fichier de concepteur quand je l'édite dans le concepteur de studio visuel?

+0

Je suis confus. Lorsque vous modifiez dans le fichier du concepteur, vous ne devez pas entrer de code. Si vous entrez du code, vous ne devriez pas le faire sur un "fichier généré par un concepteur". – jp2code

Répondre

0

Je vais essayer d'y répondre du mieux que je peux pendant que je suis absent pour les vacances, mais vous devez spécifier quelques attributs de temps de conception pour votre contrôle. Il existe un fichier DesignTimeAttributes que vous pouvez ajouter à votre assembly Controls. C'est un fichier XML, je crois avec l'extension XMTA. Dans le fichier XML pour chaque classe, vous pouvez spécifier différents attributs de temps de conception, ainsi que lier un éditeur d'heure de conception au contrôle, etc.

L'attribut que vous devez expérimenter est l'attribut DesignerSerializationVisibility. Je crois que vous pouvez définir cela à Content pour qu'il sérialise correctement votre collection.

Si vous avez besoin de plus de direction, je peux mettre à jour ma réponse lorsque je reviens à l'exemple.

Questions connexes