fixedPage.Children.Add(visual);无法转换为UIElement
时间: 2024-04-16 09:27:44 浏览: 112
抱歉,我之前给出的代码有一个错误。`FixedPage.Children.Add()` 方法需要传入的参数是 `UIElement` 类型,而 `DrawingVisual` 并不是 `UIElement` 的子类,因此无法直接添加到 `FixedPage` 的 `Children` 集合中。
为了解决这个问题,你可以将 `DrawingVisual` 绘制的内容渲染到一个 `RenderTargetBitmap` 对象中,然后将该对象包装在一个 `Image` 控件中,并将该 `Image` 控件添加到 `FixedPage` 中。这样就能正确地将梯形图添加到 `DocumentViewer` 中了。
以下是修改后的代码:
```csharp
public override DocumentPage GetPage(int pageNumber)
{
var container = new ContainerVisual();
var pageContent = new PageContent();
var fixedPage = new FixedPage();
fixedPage.Width = PageSize.Width;
fixedPage.Height = PageSize.Height;
var rowUC = _fullUC[pageNumber];
for (int i = 0; i < rowUC.Count; i++)
{
var uc = rowUC[i];
var drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen())
{
// 绘制梯形图
// ...
}
var renderTargetBitmap = new RenderTargetBitmap(
(int)uc.ActualWidth, (int)uc.ActualHeight,
96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(drawingVisual);
var image = new Image();
image.Source = renderTargetBitmap;
FixedPage.SetLeft(image, /* 设置图像的左边距 */);
FixedPage.SetTop(image, /* 设置图像的上边距 */);
fixedPage.Children.Add(image);
}
container.Children.Add(fixedPage);
((IAddChild)pageContent).AddChild(container);
return new DocumentPage(container);
}
```
请注意,你需要根据需要设置 `image` 控件的位置(左边距和上边距)。替换注释中的代码以适应你的具体情况。
这样修改后,你应该能够正确地将每一行梯形图逐个存储到 `DocumentViewer` 中了。
阅读全文