0

コンパクト フレームワークのメニュー コントロールを作成しています。コントロールにはアイテムのコレクションがあります。ビジュアル スタジオ デザイナーを使用して項目を追加できますが、デザイナー ファイルには追加されないため、次にデザイナーを開くかソリューションをビルドすると、メニューに項目がなくなります。

アイテムのコードは次のとおりです。

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

ビジュアルスタジオデザイナーで編集するときに、アイテムのコレクションをデザイナーファイルに保存する方法を知っている人はいますか?

4

1 に答える 1

0

休暇で留守にしている間にできる限りの回答をしようと思いますが、コントロールの設計時にいくつかの属性を指定する必要があります。Controls アセンブリに追加できる DesignTimeAttributes ファイルがあります。これは XML ファイルで、XMTA 拡張子が付いていると思います。各クラスの XML ファイルでは、さまざまな設計時の属性を指定したり、設計時のエディタをコントロールなどにリンクしたりできます。

試す必要がある属性は、DesignerSerializationVisibility属性です。これを Content に設定して、コレクションを正しくシリアル化できると思います。

さらに方向性が必要な場合は、例がある場所に戻ったときに回答を更新できます。

于 2012-12-24T06:59:39.783 に答える