无法在保存的图表中显示标签和标题(C#.NET、System.Windows.Controls.DataVisualization.Charting)

Posted

技术标签:

【中文标题】无法在保存的图表中显示标签和标题(C#.NET、System.Windows.Controls.DataVisualization.Charting)【英文标题】:Can't get labels and title to show up in saved chart (C#.NET, System.Windows.Controls.DataVisualization.Charting) 【发布时间】:2016-03-22 22:19:12 【问题描述】:

我正在我的代码中生成一个图表,并将其显示在屏幕上,它看起来不错:带有 X 和 Y 轴标签的漂亮曲线。

但是当我将它保存为图像时,标签和标题被涂黑了。

这是图表的 xaml...

                         <chartingToolkit:Chart  Name="chart"  Title="Test Results" VerticalAlignment="Top" Height="450" Width="450">
                            <chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key"  ItemsSource="Binding" IsSelectionEnabled="True" Title=""   Foreground="Black"  Background="Blue" BorderBrush="Blue">
                                <chartingToolkit:LineSeries.DataPointStyle>
                                    <Style TargetType="x:Type chartingToolkit:LineDataPoint">
                                        <Setter Property="Width" Value="2"/>
                                        <Setter Property="Height" Value="2"/>
                                    </Style>
                                </chartingToolkit:LineSeries.DataPointStyle>
                            </chartingToolkit:LineSeries>

                            <chartingToolkit:Chart.LegendStyle>
                                <Style TargetType="Control">
                                    <Setter Property="Width" Value="0"/>
                                    <Setter Property="Height" Value="0"/>
                                </Style>
                            </chartingToolkit:Chart.LegendStyle>
                        </chartingToolkit:Chart>

以及保存图片的方法:

    private void buttonSaveImage_Click(object sender, RoutedEventArgs e)
    

        double printScale = 96;  // pixels per inch


        // RenderTargetBitmap/Render renders the GUI element in the context of the parent control.
        // The area of the parent control that is not the desired element is masked in black pixels.
        // We render the chart inside the area of the parent, then crop the area of the chart from the larger image.
        renderBitmap = new RenderTargetBitmap((int)chart.ActualWidth, (int)chart.ActualHeight, printScale, printScale, PixelFormats.Default);


        // store the rendered chart to the bitmap
        renderBitmap.Render(chart);

        BitmapEncoder encoder = new JpegBitmapEncoder();
        string filename = String.Empty;
        // pop up save file dialog, get file name & encoder type (jpg, bmp, png, etc.)
        if (TryGetGraphicFilePath(ref filename, ref encoder))  
        
            encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
            FileStream fs = new FileStream(filename, FileMode.Create);
            encoder.Save(fs);
            fs.Flush();
            fs.Close();
        
    

有什么想法吗?

顺便说一句,我使用的技术对我来说是新的;我在薄冰上很遥远。我试过谷歌搜索,但我是空的。我当然会感谢任何帮助。谢谢!

【问题讨论】:

【参考方案1】:

尝试将图表元素包裹在带有白色背景的网格中,然后在 buttonSaveImage_Click 中尝试渲染网格而不是图表。

希望有效果

【讨论】:

赢家,赢家,吃鸡!是的,这非常有效。事实上,我尝试在图表本身上指定 Background="White",这样就成功了——不需要 Grid!谢谢!

以上是关于无法在保存的图表中显示标签和标题(C#.NET、System.Windows.Controls.DataVisualization.Charting)的主要内容,如果未能解决你的问题,请参考以下文章

图表轴标签标题过长

s-s-rS 图表 - 显示图例和百分比

dojo 图表 - 轴标签不适合图表

s-s-rS 100% 图表没有数据标签

D3图表图例标签重叠

图表每一侧的chartJS标签