DataGrid中添加图片列
首先创建一个类,设置属性,表示每一行:
public class MyDataObject
{
public int Number { get; set; }
public BitmapImage image { get; set; }
}
XAML代码:
<DataGrid x:Name="dg" Margin="0,0,0,40" ColumnWidth="*" AutoGenerateColumns="False" ItemsSource="{Binding MyDataObject}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Number}" Width="40" ClipboardContentBinding="{x:Null}" Header="序号"/>
<DataGridTemplateColumn Width="600" Header="Contour">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding image}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
以上代码,新建的一个名字为dg的DataGrid,同时添加的两个column,一个类型为DataGridTextColumn,另一个为DataGridTemplateColumn(存放图片)
注意点:
1 AutoGenerateColumns设置成false,否则可能会出现重复的列。
2 设置DataGrid的ItemsSource=”{Binding MyDataObject} MyDataObject应为新建的类名
3 设置DataGridTextColumn Binding=”{Binding Path=Number}
4 添加< Image Source ={“Binding image”} /> image应为新创建的类中的一个属性
.cs代码
List<MyDataObject> list = new List<MyDataObject>(); //用List存储每一行的数据
list.Add(new MyDataObject() { Number = 0, image = bmp0}); //假设bmp0是一个BitmapImage类型文件
list.Add(new MyDataObject() { Number = 1, image = bmp1}); //再添加一行
dgvContours.ItemsSource = list;
DataGrid显示图片,那么这个图片的类型应该为BitmapImage。如果将开始时新创建的类的属性设置为 public Bitmap image { get; set; },这样是显示不出来图片的。参考:https://stackoverflow.com/questions/23952174/display-an-image-in-a-datagrid-column
我们常常使用的是Bitmap,那么需要将Bitmap类型转换成BitmapImage类型,转换方法如下:
public BitmapImage ConvertBitmap(System.Drawing.Bitmap bitmap)
{
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
BitmapImage image = new BitmapImage();
image.BeginInit();
ms.Seek(0, SeekOrigin.Begin);
image.StreamSource = ms;
image.EndInit();
return image;
}
这样的话,对于一个Bitmap类型的图像bmp,直接 list.Add(new MyDataObject() { Number = i, image = ConvertBitmap(temp) });