以下几行最终显示路径而不是它所导致的图像。 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;
请以某种方式帮助我显示图像!谢谢。
答案 0 :(得分:0)
首先,DataGrid默认生成DataGridTextColumns,我们必须使用AutoGeneratingColumn
事件来更改列的类型。我们需要在模板中使用包含Image的DataGridTemplateColumn(图像源应绑定到正确的DataTable列)。定义模板的最佳位置在参考资料中。
以下是如何解决问题:
xaml part
<DataGrid Name="ChannelDataGrid" AutoGeneratingColumn="ChannelDataGrid_OnAutoGeneratingColumn">
<DataGrid.Resources>
<DataTemplate x:Key="ImgCell">
<Image Source="{Binding Path=Img}"/>
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
代码:
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
};
}
}
答案 1 :(得分:0)
使用TemplateColumn
控件创建Image
并设置AutoGenerateColumns to false
。