Как программно отобразить изображение в столбце сетки данных wpf?
Я хочу добавить два столбца в таблицу данных wpf: одно изображение и один текстовый столбец динамически.
XAML код:
<Grid><DataGrid AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="grid" VerticalAlignment="Stretch" Width="Auto" ></DataGrid></Grid>
Код позади:
DataGridTextColumn col = new DataGridTextColumn();
col.Header =Text1;
col.Binding =Text1;
grd.Columns.Add(col);
Как добавить изображение в столбец? Или показать изображение в столбце?
Пожалуйста, предложите
Dee
2 ответа
Как сказала Анвака, вы можете использовать DataGridTemplateColumn
, В C# вы можете добавить создать DataGridTemplateColumn
как это, здесь я добавил CheckBox
в к DataGridTemplateColumn
,
DataGridTemplateColumn col1 = new DataGridTemplateColumn();
col1.Header = "MyHeader";
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(Image));
Binding b1 = new Binding("Picture");
b1.Mode = BindingMode.TwoWay;
factory1.SetValue(Image.SourceProperty, b1);
DataTemplate cellTemplate1 = new DataTemplate();
cellTemplate1.VisualTree = factory1;
col1.CellTemplate = cellTemplate1;
datagrid.Columns.Add(col1);
Здесь изображение является собственностью ImageSource
введите класс, которому назначена коллекция ItemsSource
из DataGrid
,
Используйте DataGridTemplateColumn. Определить шаблон ячейки в Window.Resources
и использовать FindResource() для установки столбца CellTemplate
имущество.
Надеюсь это поможет.
Если вы хотите установить изображение в заголовке столбца DataGrid только программно, вы можете выполнить следующее:
ImageSource image = new BitmapImage(new Uri(@"C:/téléchargement.jpg", UriKind.RelativeOrAbsolute));
Style style = new Style(typeof(DataGridColumnHeader));
FrameworkElementFactory factory = new FrameworkElementFactory(typeof(Image));
factory.SetValue(Image.SourceProperty, image);
factory.SetValue(Image.StretchProperty, Stretch.Uniform);
style.Setters.Add(new Setter { Property = TemplateProperty, Value = new ControlTemplate { TargetType = typeof(DataGridColumnHeader), VisualTree = factory } });
DataZone.Columns[5].HeaderStyle = style;
Вы можете использовать этот метод для любого типа (например, TextBlock, Label, ...) или создать более сложный controlTemplate.