原文:
wpf控制項深拷貝:序列化/反序列化
今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。
我想做的事情是:拖動乙個窗體內的控制項(rectangle)到另乙個容器控制項內,而保留原來的控制項。
為了更好地把問題說清楚,請看如下**片段:
void canvas1_drop(objectsender, drageventargs e)
}
最後一行**報告這樣的執行時異常:
specified element is already the logical child of another element. disconnect it first
這是控制項拷貝的問題。為了解決這個問題,我們可以這樣:
void canvas1_drop(objectsender, drageventargs e)
}
以上**,是能消除這個異常,但是,被拖動的控制項也沒了。如果需求是不保留原來這個rectangle,問題也就解決了,debuglzq也沒有必要寫這篇博文分享給各位。
既然控制項直接拿過來行不通,那麼這麼解決呢?
容易想到的方法是複製這個控制項。但是如你所見,上面的複製方法明顯行不通,屬於引用物件的拷貝,只拷貝了乙個指標,其實是同乙個物件。
深拷貝,好了:
傻x一點辦法如下:
if (data.getdatapresent(typeof(rectangle)))
問題是解決了,但這種**明顯醜陋!不堪入目~雖然是效果上實現了,但總感覺其中**影藏著乙個定時炸彈,debuglzq惶惶不可終日;再退一步講,即使這樣沒有問題,但是1個rectangle就得如此大費周章,要是來個for迴圈怎麼辦?!
因此這種解決方法絕非可接受!
英文就是好,本來中文囉嗦一大堆的東西,一句話就寫完了!
我們可以(深)拷貝這個控制項採用序列化/反序列化的方式!實現如下:
if (data.getdatapresent(typeof(rectangle)))
希望對你有幫助~
很久沒有把博文發到首頁了,這篇發一下吧,老鳥飛過,輕拍~
這篇博文說白了,就是序列化/反序列化。更一般的方法,請參考debuglzq的博文:總結.net中的:賦值vs淺拷貝vs深拷貝[序列化/反序列化]
tips:今天在codeproject上看到一篇類似的文章,xaml serialization
,覺得寫得沒有我的好,
大家也可以看下~
沒什麼高階的東西,老鳥繞過,輕拍~
WPF控制項深拷貝 序列化 反序列化
今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看如下 片段 void canvas1 dro...
WPF控制項深拷貝 序列化 反序列化
原文 wpf控制項深拷貝 序列化 反序列化 今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看...
WPF控制項深拷貝 序列化 反序列化
今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看如下 片段 void canvas1 dro...