将图像添加到列表框

时间:2009-03-24 10:46:10

标签: c# wpf image listbox return-value

我有一些带有文字的图片,我需要在列表框中显示带有相关文字的图片。

浏览谷歌我遇到了这个示例类,

public class Customer
{

    public string Fname;

    public string Lname;

public Customer(string firstName, string lastName)
{
    Fname = firstName;
    Lname = lastName;
}

public override string ToString()
{
    return Fname + " " + Lname;
}
}

lstCustomers.Items.Add(new Customer("Foo","Bar"));

上面的代码工作正常,因为它只返回字符串,如何将图像和字符串一起返回以便将它添加到列表框中?

最好的问候

@nand

4 个答案:

答案 0 :(得分:7)

只需使用DataTemplateListBox中显示您的对象。

创建一个包含字符串属性和Image属性的数据对象:

public class Img
{
    public Img(string value, Image img) { Str = value; Image = img; }
    public string Str { get; set; }
    public Image Image { get; set; }
}

创建DataTemplate以显示此内容:

<ListBox x:Name="lstBox">
    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type local:Img}">
            <StackPanel>
                <TextBlock Margin="3" Text="{Binding Str}"/>
                <ContentControl Margin="3" Content="{Binding Image}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

现在将Img项(或您的数据对象)添加到ListBox,如下所示:

lstBox.Items.Add(new Img("Value", myImage));

答案 1 :(得分:3)

你不能(没有黑客攻击)将图像放入ListBoxes。

您可以将它们放在ListViews中。

您需要将图像放在ImageList组件中,然后将ImageList附加到列表视图中。当然,您可以通过添加Image属性并将其添加到ImageList.Items集合来将图像封装在类中。

然后对于List中的每个ListViewItem,将ImageIndex属性设置为listview中图像的索引。

所有这些都可以使用设计师完成。

答案 2 :(得分:1)

首先放入ValueMemeber Image属性(此处也是String属性),DrawMode放入OwnerDrawVariable并重新定义DrawItem

listbox1.DrawItem += new DrawItemEventHandler(listbox1_DrawItem);
listbox1.ItemHeight = 16;

private void listbox1_DrawItem(object sender, DrawItemEventArgs e)
       { 
e.DrawBackground();
        e.DrawFocusRectangle();
        Rectangle bounds = e.Bounds;
        Size imageSize = new Size(16, 16);
        Bitmap b;
        StringFormat sf = new StringFormat();
        sf.Alignment = StringAlignment.Far;
        Rectangle rc = new Rectangle(e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 5, e.Bounds.Height - 3);
         UseObject s ;
         if (e.Index >= 0)
         {
             s = (UseObject)listbox1.Items[e.Index];

             b = new Bitmap(s.Img, imageSize);
             e.Graphics.DrawImage(b, e.Bounds.X, e.Bounds.Y);
             e.Graphics.DrawString(s.Str, new Font("Verdana", 10, FontStyle.Bold), new SolidBrush(Color.Black), rc, sf);
         }
        }

答案 3 :(得分:0)

您可以将bitmapsource对象添加到listboxitem并将其添加到列表框中。 检查这个帖子。 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f6b7f985-f11b-4d7f-845a-44851360ee1f/