我有一些带有文字的图片,我需要在列表框中显示带有相关文字的图片。
浏览谷歌我遇到了这个示例类,
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
答案 0 :(得分:7)
只需使用DataTemplate
在ListBox
中显示您的对象。
创建一个包含字符串属性和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/