Компактный фреймворк с сохранением коллекции

Я создаю элемент управления меню для компактных рамок. Элемент управления имеет коллекцию элементов. Я могу добавлять элементы с помощью дизайнера Visual Studio, однако они никогда не добавляются в файл конструктора, и поэтому в следующий раз, когда я открываю конструктор или создаю решение, в меню больше нет элементов.

Вот код для товара:

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; }
}

Вот соответствующий код для меню:

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();
    }
}

Кто-нибудь знает, как я могу получить коллекцию элементов для сохранения в файл конструктора, когда я редактирую его в Visual Studio Designer?

1 ответ

Решение

Я постараюсь ответить на это как можно лучше, пока я уезжаю на каникулы, но вам нужно указать несколько атрибутов времени разработки для вашего контроля. Существует файл DesignTimeAttributes, который вы можете добавить в свою сборку Controls. Я полагаю, что это XML-файл с расширением XMTA. В файле XML для каждого класса вы можете указать различные атрибуты времени разработки, а также связать редактор времени разработки с элементом управления и т. Д.

Атрибут, с которым вам нужно поэкспериментировать, - это атрибут DesignerSerializationVisibility. Я полагаю, что вы можете установить это в Content, чтобы он правильно сериализовал вашу коллекцию.

Если вам нужно больше указаний, я могу обновить свой ответ, когда вернусь туда, где у меня есть пример.

Другие вопросы по тегам