我正在尝试打印报告期间生成的图表。我可以将图表放在 DocumentPaginator 文档上,但是在调整图表大小以适合页面时遇到问题。我注意到,如果我更改报告程序的大小,这将改变图表大小,则会影响图表的缩放比例。这一认识向我展示了图表的ActualWidth
和ActualHeight
与缩放直接相关。
我试过了:
myChart.Width = newWidth;
myChart.Height = newHeight;
Measure(myChart.RenderSize);
Arrange(new Rect(0, 0, newWidth, newHeight));
但这导致我在报告程序中的可视图表调整大小,并且可打印图表在第二次打印之前不会调整为新大小。
意识到 myChart 已连接到 reportChart,我尝试将 reportChart 复制/克隆到 myChart。
我试过了:
public class Copy<T>
{
public static T DeepCopy<T>(T element)
{
string xaml = XamlWriter.Save(element);
StringReader xamlString = new StringReader(xaml);
XmlTextReader xmlTextReader = new XmlTextReader(xamlString);
var DeepCopyobject = (T)XamlReader.Load(xmlTextReader);
return DeepCopyobject;
}
}
或者
myChart = XamlReader.Parse(XamlWriter.Save(reportChart.DataContext)) as Chart
但string xaml = XamlWriter.Save(element);
会花费太长时间,两者都会导致堆栈溢出。
我在用
myChart = new Chart() { DataContext = reportChart.DataContext }
制作我的副本,但 ActualWidth 和 ActualHeight 遇到“0”,所以我无法判断 Chart 的 DataContext 是否正确复制。
我确实让我的图表使用
myChart.Width = newWidth;
myChart.Height = newHeight;
myChart.Measure(new System.Windows.Size(newWidth, newHeight));
myChart.Arrange(new Rect(0, 0, newWidth, newHeight));
或者说我的 Chart 的 ActualWidth 和 ActualHeight 更新到我想要的大小,但是我在我的文档上得到了一个黑色图像,图表应该在哪里。
那么如何打印一张图表,并将其正确缩放到选定的纸张尺寸?