将图像添加到ListView列 [英] Add Image to ListView Column

查看:91
本文介绍了将图像添加到ListView列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我有一个包含5列的Listview,在最后一列中,id喜欢有5个图像而不是文本.例如5颗星代表评分".我现在在互联网上搜索了大约一个小时,但仍然不知所措,该怎么办...希望您能为我提供帮助:)
这是我的代码:

Hello guys,

I have a Listview with 5 Columns and in the last Column, id like to have 5 images instead of a text. e.g. 5 "stars" for "rating". I searched about an hour in the internet now, but still I''ve got no clue, what to do... I hope you can help me :)
Here is my code:

public class ListHandler
    {
        private MainWindow mainWin;
        private ListView listview;

        private List<ListItem> items;

        public ListHandler(MainWindow win)
        {
            mainWin = win;
            listview = new ListView();
            listview.Width = 1100;
            listview.Height = 948;
            listview.Margin = new Thickness(60, 47, 0, 0);
                GridView myGridView = new GridView();
                myGridView.AllowsColumnReorder = true;
                    GridViewColumn myGridViewColumn;
                    // ... more GridViewColumns
                    myGridViewColumn = new GridViewColumn();
                    myGridViewColumn.DisplayMemberBinding = new Binding("Genre");
                    myGridViewColumn.Header = "Genre";
                    myGridViewColumn.Width = 120;
                    myGridView.Columns.Add(myGridViewColumn);
                    // What to do here?
                    myGridViewColumn = new GridViewColumn();
                    myGridViewColumn.DisplayMemberBinding = new Binding("Rating");
                    myGridViewColumn.Header = "Rating";
                    myGridViewColumn.Width = 120;
                    myGridView.Columns.Add(myGridViewColumn);
            listview.View = myGridView;
            InitializeItems();
            listview.ItemsSource = items;
            listview.SelectedItem = listview.Items.GetItemAt(0);
            listview.SelectedValue = listview.Items.GetItemAt(0);
            listview.SelectedIndex = 0;
            mainWin.Add(listview);
        }

        private void InitializeItems()
        {
            items = new List<ListItem>();
            for (int i = 0; i < 200; i++)
            {
                items.Add(new ListItem(i, "s1 ", "s2 ", "s3 ", "s4 ", "s5 ", 3));
            }
        }
    }


非常感谢您的帮助!


Thank you very much for help!

推荐答案

或者您可以使用从int到图像(生成或加载)的转换器."

我试过了:
"Or you can use a converter from int to a image (generated or loaded)."

I tried this:
public ImageBrush Rating
    {
    get { return new ImageBrush(new BitmapImage(new Uri("BewertungSternLeer.bmp", UriKind.RelativeOrAbsolute))); }
    }







and

myGridViewColumn = new GridViewColumn();
myGridViewColumn.DisplayMemberBinding = new Binding("Rating");
myGridViewColumn.Header = "Rating";
myGridViewColumn.Width = 120;;
myGridView.Columns.Add(myGridViewColumn);



但是可悲的是我不知道该怎么办...请帮助我:S



But sadly I have no idea what to do... please help me :S


创建您自己的用户控件,该控件根据整数或双数显示多少颗星星/半颗星星.然后使用该控件并将其绑定到等级字段.

或者,您可以使用从int到图像(生成或加载)的转换器.见下文.用作指导,只是快速示例.
Create your own user control who displays a number of stars/half stars depending on integer or double. Then use that control and bind it to the rating field.

Or you can use a converter from int to a image (generated or loaded). See below. Use it as a guidance, it''s just a quick sample.
internal class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int rating = Int32.Parse(value.ToString());
        switch (rating)
        {
            case 1:
                return "C:\\TEMP\\one_star.png";
            case 2:
                return "C:\\TEMP\\two_stars.png";
            default:
                return "C:\\TEMP\\no_stars.png";
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}



和XAML:



And XAML:

<Window x:Class="RatingTest.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:RatingTest="clr-namespace:RatingTest"

        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <RatingTest:ImageConverter x:Key="ImageConverter"/>
        <XmlDataProvider x:Key="InventoryData" XPath="/Movies">
            <x:XData>
                <Movies xmlns="">
                    <Movie>
                        <Title>One</Title>
                        <Rating>1</Rating>
                    </Movie>
                    <Movie>
                        <Title>Two</Title>
                        <Rating>2</Rating>
                    </Movie>
                </Movies>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
    <ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Movie}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Title">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding XPath=Title}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Rating">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding XPath=Rating, Converter={StaticResource ImageConverter}}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
</Window>


谢谢!这行得通!但是我还有另一个问题:我可以通过
将新项目添加到列表中
Thx! This works! But I still have another question: I can Add new Items to the list via
<listitem>
<number>1</number>
<songname>lied</songname>
<interpret>int</interpret>
<featuring>feat</featuring>
<album>alb</album>
<genre>hiphop</genre>
<rating>1</rating>
</listitem>


但是我想用C#做到这一点,就像这样:


But I would like to do this in C#, like this:

List<listitem> list = new List<listitem>();
list.Add(...);
listviewer.ItemsSource = list;</listitem></listitem>


该怎么做?

以及如何设置GridViewColumn的最大/最小宽度?

问候abfl


How to do this?

And how to set the maximum/minimum width of a GridViewColumn?

greetings abfl


这篇关于将图像添加到ListView列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆