I'm trying to iterate through all charts within a window (it has tabs), draw a text when I change the tab and then save to an .png image.
The problem is only drawing in the indicator window, not on the others.
Also, I want to obtain the timeframe of every tab and use it on filename image.
My actual code:
...
private NinjaTrader.Gui.Chart.Chart chart;
...
private void CaptureAllCharts()
{
ChartControl.Dispatcher.InvokeAsync(async () =>
{
var chartWindow = Window.GetWindow(ChartControl.Parent) as Chart;
var chartControl = chartWindow.ActiveChartControl;
int i = 0;
var tabs = chartWindow.MainTabControl.Items;
if (tabs == null || tabs.Count == 0) return;
int tabActual = chartWindow.MainTabControl.SelectedIndex;
string safeDateTime;
foreach (TabItem tab in chartWindow.MainTabControl.Items)
{
safeDateTime = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
chartWindow.MainTabControl.SelectedIndex = i;
await Task.Delay(1000);
chartControl = chartWindow.ActiveChartControl; //no necesario??
Draw.TextFixed(this, safeDateTime + i, BarsPeriod.Value.ToString() + "_" + BarsPeriod.BarsPeriodType, TextPosition.BottomLeft);
chartControl.InvalidateVisual();
CaptureChartImage(chartControl, i, BarsPeriod.Value.ToString(), BarsPeriod.BarsPeriodType.ToString());
RemoveDrawObject(safeDateTime + i);
i++;
}
chartWindow.MainTabControl.SelectedIndex = tabActual;
});
}
private void CaptureChartImage(ChartControl chartControl, int i, string barsValue, string barsPeriodType)
{
if (chartControl != null) {
string path = Core.Globals.UserDataDir + "SavedImages\\";
chart = Window.GetWindow(chartControl) as Chart;
if (chart != null)
{
try
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
RenderTargetBitmap screenCapture = chart.GetScreenshot(ShareScreenshotType.Chart);
BitmapFrame outputFrame = BitmapFrame.Create(screenCapture);
if (screenCapture != null)
{
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(outputFrame);
string safeDateTime = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
string fileName = Instrument.FullName + "_" + BarsPeriod.Value + "_" + barsPeriodType + "_" + safeDateTime + "_" + i;
fileName = fileName.Replace('/', '_').Replace('\\', '_').Replace(':', '_').Replace(' ', '_');
string filePath = Path.Combine(path, fileName + ".png");
using (Stream stream = File.Create(filePath))
{
png.Save(stream);
}
Print("Captura guardada: " + filePath);
}
}
catch (Exception ex)
{
Print("Error al guardar la captura: " + ex.Message);
}
}
}
}

Comment