WPF DataGrid显示图片的一种方法

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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页