添加多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
相关产品推荐
相关产品推荐

