using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; namespace StackingBarChart { public class CustomControl : Control { public override void OnApplyTemplate() { base.OnApplyTemplate(); this.SizeChanged += OnSfChartSizeChanged; } void OnSfChartSizeChanged(object sender, SizeChangedEventArgs e) { } public void Save(string fileName) { FrameworkElement element = this; string imageExtension = null; imageExtension = new FileInfo(fileName).Extension.ToLower(System.Globalization.CultureInfo.InvariantCulture); BitmapEncoder imgEncoder = null; switch (imageExtension) { case ".bmp": imgEncoder = new BmpBitmapEncoder(); break; case ".jpg": case ".jpeg": imgEncoder = new JpegBitmapEncoder(); break; case ".png": imgEncoder = new PngBitmapEncoder(); break; case ".gif": imgEncoder = new GifBitmapEncoder(); break; case ".tif": case ".tiff": imgEncoder = new TiffBitmapEncoder(); break; case ".wdp": imgEncoder = new WmpBitmapEncoder(); break; default: imgEncoder = new BmpBitmapEncoder(); break; } if (element != null) { RenderTargetBitmap bmpSource = new RenderTargetBitmap((int)element.ActualWidth, (int)element.ActualHeight, 96, 96, PixelFormats.Pbgra32); bmpSource.Render(element); imgEncoder.Frames.Add(BitmapFrame.Create(bmpSource)); using (Stream stream = File.Create(fileName)) { imgEncoder.Save(stream); } } } } }