将图像添加到ListView列 [英] Add Image to ListView Column
问题描述
大家好,
我有一个包含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屋!