You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加多BitmapImages至打印页面遇‘Element已属其他元素’错误求助

问题解决:Element is already the child of another element.

错误原因

你在循环外只创建了一组page、viewablePage、photoView实例,每次循环都把这同一个实例重复添加到父容器中。而XAML的UI元素只能属于一个父元素,重复添加就会触发这个错误。

修改方案

把page、viewablePage、photoView的创建逻辑移到foreach循环内部,这样每处理一张图片都会生成全新的UI元素实例,避免重复引用。

修改后的完整代码

foreach(var btm in bitmapImages)
{
    // 为每张图片创建独立的页面容器
    Canvas page = new Canvas
    {
        Width = pageDescription.PageSize.Width,
        Height = pageDescription.PageSize.Height
    };

    Canvas viewablePage = new Canvas()
    {
        Width = pageDescription.ViewablePageSize.Width,
        Height = pageDescription.ViewablePageSize.Height
    };

    viewablePage.SetValue(Canvas.LeftProperty, pageDescription.Margin.Width);
    viewablePage.SetValue(Canvas.TopProperty, pageDescription.Margin.Height);

    // 为每张图片创建独立的图片容器
    Grid photoView = new Grid
    {
        Width = pageDescription.PictureViewSize.Width,
        Height = pageDescription.PictureViewSize.Height
    };

    Image image = new Image
    {
        Source = btm,
        HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center,
        VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center
    };

    // 使用真实图片尺寸,避免不必要的放大
    if (btm.PixelWidth <= pageDescription.PictureViewSize.Width &&
        btm.PixelHeight <= pageDescription.PictureViewSize.Height)
    {
        image.Stretch = Stretch.None;
        image.Width = btm.PixelWidth;
        image.Height = btm.PixelHeight;
    }

    photoView.Children.Add(image);
    viewablePage.Children.Add(photoView);
    page.Children.Add(viewablePage);
    pages.Add(page);
}

额外修正

原代码里image.Width = bitmap.PixelWidth中的bitmap是未定义变量,已改为btm,和循环变量保持一致。

内容的提问来源于stack exchange,提问作者Martin King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:25:26