加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

添加图像在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也是如此.希望它可以帮到某人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读