博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight用户控件转移时产生的“元素已经是另一个元素的子元素”问题
阅读量:6084 次
发布时间:2019-06-20

本文共 1631 字,大约阅读时间需要 5 分钟。

        最近的项目中遇到了silverlight用户控件由一个canvas转移到另一个canvas的问题,在转移的过程中一直提示“元素已经是另一个元素的子元素”,十分讨厌,调试了多次也没有找到原因所在,情况如下

1,简单的移动

  

LayerTwo是一个usercontrol,mainpage.xaml上呢有两个canvas,其中一个放的有LayerTwo,

 代码

<
Grid 
x:Name
="LayoutRoot"
 Background
="White"
>
 
        
<
Canvas 
Height
="100"
 HorizontalAlignment
="Left"
 Margin
="24,25,0,0"
 Name
="canvas1"
 VerticalAlignment
="Top"
 Width
="200"
 
>
 
             
<
layer:LayerTwo 
x:Name
="uc"
 Canvas.Left
="3"
 Canvas.Top
="-130"
></
layer:LayerTwo
>
 
        
</
Canvas
>
 
        
<
Canvas 
Height
="100"
 HorizontalAlignment
="Left"
 Margin
="24,140,0,0"
 Name
="canvas2"
 VerticalAlignment
="Top"
 Width
="200"
 
/>
 
        
<
Button 
Content
="Button"
 Height
="23"
 HorizontalAlignment
="Left"
 Margin
="266,117,0,0"
 Name
="button1"
 VerticalAlignment
="Top"
 Width
="75"
 
/>
 
    
</
Grid
>

  

我们如果将layertwo从canvas1中转移到canvas2中,只需要 

UserControl uc 
=
 
this
.canvas1.Children[
0
as
 UserControl; 
            
this
.canvas1.Children.RemoveAt(
0
); 
            
this
.canvas2.Children.Add(uc);

 

2,如果usercontrol是放在嵌套的canvas中或者是其他的usercontrol中呢?

如果我们将上面的例子简单的改变一下,在canvas1中再增加一层canvas3,layerTwo.xaml放在canvas3中,如果想把layerone.xaml转移到canvas2中怎么做呢?

 

代码
Canvas c 
=
 
this
.canvas2.Children[
0
as
 Canvas; 
            UserControl uc 
=
 c.Children[
0
as
 UserControl; 
            
this
.canvas2.Children.RemoveAt(
0
); 
            
this
.canvas1.Children.Add(uc);

 

 这种做法就是直接将内层的canvas去掉,按说内层的canvas去掉后,里面的usercontrol应该也没有了,但是当我们添加获取的usercontrol到canvas1时,发现“元素已经是另一个元素的子元素”这个恼人的提示,debug后发现这个usercontrol居然还有parent父级对象,于是在usercontrol的最直接上级canvas3 再次执行了removeat的方法才得以通过。

 

 this.canvas2.Children.RemoveAt(0); 

//换成这样
c.Children.RemoveAt(
0
); 

 

 类似的用户控件使用必须确保此用户控件的父级对象为空,执行remove此用户控件后再添加到其他地方,否则是添加不了的。

     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/587187,如需转载请自行联系原作者

你可能感兴趣的文章
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
Q85 最大矩形
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>