저는 현재 ImageList에 들어있는 투명한 .png 이미지 목록을 가져 와서 ImageID 열을 기반으로하는 WPF DataGrid에 표시해야했습니다. 다음과 같이 내가의 DataGridColumn를 설정 한WPF DataGrid에 투명한 이미지 표시
:
_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 가지 방법을 실행하고 오히려 (내가 지금까지와 WPF에서 작업 얻을 관리해야하는 유일한 형식입니다)를 BitmapImage보다 비트 맵으로 변환하는 두 번째 :
이미지가 올바른 크기와 위치에 표시되고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에 있지만 투명도는 pres가 아닙니다. .png 형식에서 삭제되었습니다. 누구든지 나에게 더 나은 방법을 안다면 (예를 들어 이미지를 리소스 파일로 가져 오는 것이 더 낫겠습니까?) 또는 현재 코드 내에서 투명성을 유지하는 방법을 사용하면 가장 좋습니다.
드롭 모두'관련 System.Drawing.Bitmap' 물건. WPF에서는 필요하지 않습니다. 'Image.Source' 속성을 원본 이미지 파일을 참조하는'Uri'에 바인드하면됩니다. 크기 조정은 이미'Image' 컨트롤에 의해 수행됩니다. – Clemens
Image 컨트롤을 사용하고 있지 않지만 DataGridColumn 내에서 이미지를 표시하고 DataGridTemplateColumn을 사용하여 이미지를 완성해야합니까? – SkankyMuppet
다음은 무엇입니까 :'FrameworkElementFactory (typeof (Image));'? 'Image'는 [Image control] (http://msdn.microsoft.com/en-us/library/System.Windows.Controls.Image.aspx)입니다. – Clemens