添加图像在C#wpf项目中以编程方式执行DataGrid – 如何?
发布时间:2020-12-15 07:56:24 所属栏目:百科 来源:网络整理
导读:我有个问题. 我想在没有VS Designer的情况下以C#编程编写所有内容. 所以,我正在创建一个图像和DataGrid(我将它添加为MainWindow Grid的子代): Image img = new Image(); Uri uri = new Uri(@"C:d1.jpg"); img.Source = new System.Windows.Media.Imaging.B
我有个问题.
我想在没有VS Designer的情况下以C#编程编写所有内容. 所以,我正在创建一个图像和DataGrid(我将它添加为MainWindow Grid的子代): Image img = new Image(); Uri uri = new Uri(@"C:d1.jpg"); img.Source = new System.Windows.Media.Imaging.BitmapImage(uri); DataGrid dg = new DataGrid(); grid1.Children.Add(dg); 然后我想添加4列,例如3个文本和1个图像.所以首先我需要创建一个包含样本数据的DataTable和DataRow: DataTable dt = new DataTable(); dt.Columns.Add("Column1"); dt.Columns.Add("Column2"); dt.Columns.Add("Column3"); dt.Columns.Add("Column4",typeof(Image)); // type of image! DataRow dr = dt.NewRow(); dr[0] = "aaa"; dr[1] = "bbb"; dr[2] = "ccc"; dr[3] = img; // add a sample image dt.Rows.Add(dr); 现在我有一个包含4列和1行数据的DataTable. 然后我需要做的就是像这样设置DataGrid的ItemsSource: dg.ItemsSource = dt.DefaultView; 我做错了什么?为什么在最终网格上连续有System.Windows.Controls.Image而不是真实图像?我需要绑定它还是什么? 所有我需要以编程方式完成的事情,没有设计师. 如何显示真实图像而不是该字符串? 解决方法
仍然不知道如何在100%的程序上做到这一点,但我弄清楚了.
最重要的是DataGrid(或GridView)不支持Image.为什么?不要问我.所以我将图像更改为BitmapImage,它就像一个魅力. 所以有我的修改: Uri uri = new Uri(@"C:d1.jpg"); BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage(uri); ... DataGrid dg = new DataGrid(); dg.AutoGenerateColumns = false; DataGridTemplateColumn col1 = (DataGridTemplateColumn)this.FindResource("dgt"); dg.Columns.Add(col1); DataGridTextColumn col2 = new DataGridTextColumn(); col2.Header = "Column2"; col2.Binding = new Binding("Column2"); dg.Columns.Add(col2); ... DataTable dt = new DataTable(); dt.Columns.Add("Column1",typeof(BitmapImage)); dt.Columns.Add("Column2"); DataRow dr = dt.NewRow(); dr[0] = bmp; dr[1] = "test"; dt.Rows.Add(dr); ... dg.ItemsSource = dt.DefaultView; grid1.Children.Add(dg); 但我需要将资源添加到XAML(不知道如何编程).所以有一个代码: <Window.Resources> <DataGridTemplateColumn x:Key="dgt" Header="Column1" Width="SizeToCells"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Image Source="{Binding Column1}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </Window.Resources> 一切都很好! GridView或ListView也是如此.希望它可以帮到某人. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |