0

Winforms の ListBox に UI 要素を追加したいと考えています。Elipse または Rectangle を追加すると、リストに表示されるのは Object.ToString() です。UI 要素を ListBox.Items に挿入すると、文字列表現ではなく、挿入したオブジェクトが表示されるという WPF の動作を取得するにはどうすればよいですか?

4

1 に答える 1

1

開始点は、図形を描画するために必要なことを実行するのに適したインターフェイスを宣言することです。具体的な Shape クラスは、そのインターフェイスを実装する必要があります。

    public interface IShape {
        Rectangle Measure();
        void Draw(Graphics g);
        // etc...
    }

ListBox の DrawMode プロパティを DrawMode.OwnerDrawVariable に設定する必要があります。形状を表示するためのリストボックス項目の大きさを決定するために必要な MeasureItem イベント ハンドラーを実装する必要があります。

    void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) {
        e.ItemWidth = listBox1.ClientSize.Width;
        var shape = listBox1.Items[e.Index] as IShape;
        if (shape != null) e.ItemHeight = shape.Measure().Height;
    }

また、図形を描画するには、DrawItem イベントのイベント ハンドラーを実装する必要があります。

    void listBox1_DrawItem(object sender, DrawItemEventArgs e) {
        e.DrawBackground();
        var shape = listBox1.Items[e.Index] as IShape;
        if (shape != null) shape.Draw(e.Graphics);
        e.DrawFocusRectangle();
    }
于 2013-10-20T12:10:43.807 に答える