Добавить изображение в список - PullRequest
4 голосов
/ 24 марта 2009

У меня есть несколько изображений с текстом, мне нужно показать изображение с соответствующим текстом в списке.

Просмотр Google Я наткнулся на этот образец класса,

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"));

Приведенный выше код работает нормально, так как он возвращает только строку, как мне вернуть изображение и строку вместе, чтобы она была добавлена ​​в список?

С наилучшими пожеланиями

@ * 1010 NAND *

Ответы [ 5 ]

7 голосов
/ 17 апреля 2009

Просто используйте 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));
3 голосов
/ 24 марта 2009

Вы не можете (не взламывая) помещать изображения в списки.

Вы можете поместить их в ListViews.

Вам необходимо поместить ваши изображения в компонент ImageList, а затем прикрепить ImageList к вашему списку. Конечно, вы можете инкапсулировать свое изображение в своем классе, добавив свойство Image и добавив его в коллекцию ImageList.Items.

Затем для каждого ListViewItem в списке установите для свойства ImageIndex индекс изображения в просмотре списка.

Все это можно сделать с помощью дизайнера.

1 голос
/ 24 мая 2015

сначала поместите в свойство 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);
         }
        }
0 голосов
/ 10 сентября 2011

В ответ на вопрос Аббасси - , но я получил ошибку "local" - это необъявленное пространство имен

См. Следующее:

Добавить "локальное" пространство имен в теге Window.

<Window x:Class="MyApp.MyWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MyWindow" Height="400" Width="600"
    xmlns:local="clr-namespace:MyApp">
0 голосов
/ 24 марта 2009

Вы можете добавить объекты bitmapsource к элементу списка и добавить его в список. Проверьте эту тему. http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f6b7f985-f11b-4d7f-845a-44851360ee1f/

...