DataGrid显示图像的路径而不是图像本身
以下行最终显示路径而不是它导致的图像。 AutoGenerateColums设置为true,将其设置为false将以完全空行结束。
System.Data.DataTable DataTable = new System.Data.DataTable(); System.Data.DataColumn DataColumn = new System.Data.DataColumn(); Uri uri = new Uri(@"C:/Users/User/Desktop/szagdoga/error.png"); BitmapImage img = new BitmapImage(uri); DataColumn.DataType = img.GetType(); DataColumn.ColumnName = ("this"); DataTable.Columns.Add("Test #"); DataTable.Columns.Add(DataColumn); DataTable.Columns.Add("Min Range"); DataTable.Columns.Add("Max Range"); DataTable.Columns.Add("Result"); for (int i = 6; i <50; i++) DataTable.Rows.Add(ExcelFile[0, i],img, ExcelFile[1,i],0,0,0); ChannelDataGrid.ItemsSource = DataTable.DefaultView;
请帮我以某种方式显示图像! 谢谢。
首先,DataGrid默认生成DataGridTextColumns,我们必须使用AutoGeneratingColumn
事件来更改列的类型。 我们需要在模板中使用包含Image的DataGridTemplateColumn(图像源应绑定到正确的DataTable列)。 在Resources中定义模板的最佳位置。
这是问题如何解决:
xaml部分
码:
private void InitializeDataTable() { System.Data.DataTable DataTable = new System.Data.DataTable { Columns = {"Test #", "Img", "Min Range", "Max Range", "Result"} }; Uri uri = new Uri(@"C:/Users/User/Desktop/szagdoga/error.png"); for (int i = 6; i < 50; i++) DataTable.Rows.Add(ExcelFile[0, i], uri, ExcelFile[1, i], 0, 0); ChannelDataGrid.ItemsSource = DataTable.DefaultView; } private void ChannelDataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyName == "Img") { // replace text column with image column e.Column = new DataGridTemplateColumn { // searching for predefined tenplate in Resources CellTemplate = (sender as DataGrid).Resources["ImgCell"] as DataTemplate, HeaderTemplate = e.Column.HeaderTemplate, Header = e.Column.Header }; } }
使用Image
控件创建TemplateColumn
并将AutoGenerateColumns to false
设置AutoGenerateColumns to false
。