使用Image和Text WPF创建DataGridTemplateColumn

时间:2017-01-04 14:16:45

标签: wpf image text datagridtemplatecolumn

我正在使用此代码创建一个显示图像和文本的列,但只显示文本,我做错了什么?

DataGridTemplateColumn col1 = new DataGridTemplateColumn();                 col1.Header =" MyHeader&#34 ;;

            FrameworkElementFactory factoryStackPanel = new FrameworkElementFactory(typeof(System.Windows.Controls.StackPanel));
            factoryStackPanel.SetValue(System.Windows.Controls.StackPanel.OrientationProperty, Orientation.Vertical);

            FrameworkElementFactory factoryTextBlock = new FrameworkElementFactory(typeof(System.Windows.Controls.TextBlock));
            Binding bindTextBlock = new Binding("[" + i + "]");
            factoryTextBlock.SetValue(System.Windows.Controls.TextBlock.TextProperty, bindTextBlock);
            factoryTextBlock.SetValue(System.Windows.Controls.TextBlock.TextWrappingProperty, TextWrapping.Wrap);
            factoryTextBlock.SetValue(System.Windows.Controls.TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Center);

            FrameworkElementFactory factoryImage = new FrameworkElementFactory(typeof(System.Windows.Controls.Image));
            Binding bindImage = new Binding("http://www.pgn.co.id/images/modules/logo_pgn.png");
            factoryImage.SetValue(System.Windows.Controls.Image.SourceProperty, bindImage);

            factoryStackPanel.AppendChild(factoryImage);
            factoryStackPanel.AppendChild(factoryTextBlock);

            DataTemplate cellTemplate = new DataTemplate() { VisualTree = factoryStackPanel };

            col1.CellTemplate = cellTemplate;

            gridViewItens.Columns.Add(col1);

2 个答案:

答案 0 :(得分:0)

像Ed Plunkett所说的那样,在XAML中这样做要干净得多。假设您的DataGrid绑定了某些项目的ObservableCollection,并且您的项目类具有MyTextMyImage等属性,则可以执行以下操作:

<DataGridTemplateColumn Header="My Item">
     <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
          <StackPanel Orientation="Horizontal">
              <Image Source="{Binding MyImage}" />
              <TextBlock Text="{Binding MyText}" />
          </StackPanel>
      </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

答案 1 :(得分:0)

DataGridTemplateColumn使用数据模板,其工作方式与数据模板相同 您之前使用列表控件探索过的功能。 DataGridTemplateColumn的唯一区别是 它允许您定义两个模板:一个用于数据显示(CellTemplate),另一个用于数据编辑(CellEditingTemplate),您很快就会考虑这些模板。这是一个使用模板数据列的示例 将每个产品的缩略图放在网格中:

<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Stretch="None" Source=
"{Binding Path=ProductImagePath, Converter={StaticResource ImagePathConverter}}">
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>