Чтобы показать растровое изображение в ячейке DataGrid, вы можете использовать DataGridTemplateColumn с DataTemplate, используя IValueConverter для отображения изображения в ячейке DataGrid.
Вы можете поиграть со свойствами BmpBitmapDecoder, чтобы получить максимально хорошее изображение.
Вот определение для DataGrid в XAML:
1- У меня есть три столбца в DataGrid с первым изображением.
2- Я установил Path =.потому что все, что я хотел сделать, это загрузить изображение из конвертера.
3- DataGrid привязывается к коллекции Customers в ViewModel, и в конце я включил их определения для полноты.
<Window x:Class="ContextMenuNotFiring.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Helpers="clr-namespace:ContextMenuNotFiring.Helpers"
Title="Main Window" Height="400" Width="800">
<Window.Resources>
<Helpers:ImageConverter x:Key="imgConv"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<DataGrid
Grid.Row="0"
IsSynchronizedWithCurrentItem="True"
Background="Transparent"
AutoGenerateColumns="False"
ItemsSource="{Binding Customers}">
<DataGrid.Columns>
<DataGridTemplateColumn
Header="Icon"
Width="SizeToHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Path=., Converter={StaticResource imgConv}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Header="First Name"
Width="SizeToHeader"
Binding="{Binding FirstName}" />
<DataGridTextColumn
Header="Last Name"
Width="SizeToCells"
Binding="{Binding LastName}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Вот конвертер, который выполняет разовый поиск ассоциированного значка Word Doc.Если вы хотите обрабатывать несколько значков, сохраните ссылки BitmapFrame в Словаре и используйте входной параметр «value», чтобы выбрать, какое изображение отображать.
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Windows.Data;
using System.Windows.Media.Imaging;
namespace ContextMenuNotFiring.Helpers
{
[ValueConversion(typeof(object), typeof(BitmapSource))]
public sealed class ImageConverter : IValueConverter
{
private static BitmapFrame _bitmapFrame = null;
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
try
{
if (_bitmapFrame == null)
{
using (Icon bigIcon32x32 = Icon.ExtractAssociatedIcon("c:\\temp\\test.docx"))
{
using (Bitmap bm = bigIcon32x32.ToBitmap())
{
MemoryStream finalStream = new MemoryStream();
{
bm.Save(finalStream, ImageFormat.Bmp);
BmpBitmapDecoder bitmapDecoder = new BmpBitmapDecoder(finalStream,
BitmapCreateOptions.None, BitmapCacheOption.None);
_bitmapFrame = bitmapDecoder.Frames[0];
}
}
}
}
return _bitmapFrame;
}
catch
{
return Binding.DoNothing;
}
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Модель просмотра загружает следующую коллекцию «Клиенты - моя модель представления».конструктор.
private List<Customer> _customers = new List<Customer>():
public List<Customer> Customers
{
get
{
return _customers;
}
}
public class Customer
{
public String FirstName { get; set; }
public String LastName { get; set; }
}