Мне было поручено взять существующий список прозрачных изображений .png (в настоящее время размещен в ImageList) и отображать их в WPF DataGrid на основе столбца ImageID.Отображение прозрачного изображения в WPF DataGrid
Я настроил DataGridColumn следующим образом:
_dataTemplateColumn = new DataGridTemplateColumn();
_dataTemplateColumn.Header = "";
FrameworkElementFactory _factory = new FrameworkElementFactory(typeof(Image));
Binding _binding = new Binding("Image");
_binding.Mode = BindingMode.TwoWay;
_factory.SetValue(Image.SourceProperty, _binding);
DataTemplate _cellTemplate = new DataTemplate();
_cellTemplate.VisualTree = _factory;
_dataTemplateColumn.CellTemplate = _cellTemplate;
Style _style = new Style();
_style.Setters.Add(new Setter(BackgroundProperty, Brushes.Transparent));
_dataTemplateColumn.CellStyle = _style;
Я затем создать пользовательский объект во время выполнения, который включает в себя изображение для меня и запустить следующие 2 метода на Образа, первый изменить его размер и второй, чтобы превратить его в Bitmap, а не BitmapImage (который является единственным форматом, мне удалось получить его работу в WPF с до сих пор):
public static Bitmap ResizeImage(this Bitmap Bitmap, Size size)
{
try
{
Bitmap _bitmap = new Bitmap(size.Width, size.Height);
using (Graphics _graphic = Graphics.FromImage((Image)_bitmap))
{
_graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
_graphic.DrawImage(Bitmap, 0, 0, size.Width, size.Height);
}
_bitmap.MakeTransparent(Color.Magenta);
return _bitmap;
}
catch (Exception ex)
{
throw ex;
}
}
public static Bitmap ToBitmap(this BitmapImage BitmapImage)
{
using (MemoryStream _stream = new MemoryStream())
{
BitmapEncoder _encoder = new BmpBitmapEncoder();
_encoder.Frames.Add(BitmapFrame.Create(BitmapImage));
_encoder.Save(_stream);
System.Drawing.Bitmap _bitmap = new System.Drawing.Bitmap(_stream);
_bitmap.MakeTransparent(Color.Magenta);
return new Bitmap(_bitmap);
}
}
изображение, что отображается правильный размер и положение в DataGrid, но прозрачность не является urb из формата .png. Если кто-нибудь знает лучший метод для меня (возможно, правильнее взять изображение в файл ресурсов, например, например?) Или способ получить прозрачность, работающую в моем текущем коде, это было бы очень полезно!
Капля все 'System.Drawing.Bitmap' родственный вещи. Это не нужно в WPF. Просто привяжите свойство Image.Source к 'Uri', которое ссылается на исходный файл изображения. Изменение размера уже выполняется с помощью элемента управления «Image». – Clemens
Я не использую Image Control, хотя изображение должно отображаться в DataGridColumn и выполняется с помощью DataGridTemplateColumn? – SkankyMuppet
Тогда что это: 'FrameworkElementFactory (typeof (Image));'? «Изображение» - это [Управление изображениями] (http://msdn.microsoft.com/en-us/library/System.Windows.Controls.Image.aspx). – Clemens