2011-04-07 21 views
1

我在我的WPF應用程序中有一個Canvas控件,並且我在其他線程中創建了大量形狀並將它們添加到畫布上(使用Dispatcher),但由於我正在重新創建子對象(它們是動態的並從其他數據生成,並在運行時改變它們的數量),我稱之爲:如何持續更新WPF中Canvas上的形狀?

canvas.Children.Clear(); 

但這樣做使得「閃爍」的畫布,所以給出了一個閃爍的外觀作爲畫布是越來越清洗和填充。是否有可能使其顯示爲「連續」,因此乾淨的畫布步驟不可見?

我不確定是否需要使用上述呼叫或做其他事情來避免它。

回答

0

與其一次性清除所有Canvas子元素,爲什麼不一次一個地移除它們並逐個重新創建它們,例如,您可以爲每個形狀添加一個計時器,然後計時器在每個刻度後刪除該形狀從帆布兒童,這種閃爍的效果將消失。

+0

所有的形狀必須刪除並添加在不同的步驟。所以不知道如果一個一個地刪除和添加,仍然會放棄我不會不斷更新形狀。 – 2011-04-08 00:04:26

+0

@Joan Venge:我的意思不是將它們一個接一個地去除,而是以不同的時間間隔,每個形狀都有自己的計時器,每個計時器都會更新形狀。 – 2011-04-08 06:17:37

+0

謝謝,我明白你的意思了。雖然我不確定這是否會更容易。因爲每個形狀都是相互影響的,所以他們的結果必須在同一個地方進行計算。 – 2011-04-08 16:33:23

2

Canvas可讓您管理其子項的位置,但它仍負責繪圖操作。如果你清除它的孩子,你實際上只是要求它重新繪製自己的背景。

您可以修改Canvas的子項,因此如果您確定它仍然存在,我建議修改子項的屬性(而不是刪除它並重新添加它)。否則,刪除它並創建新的並添加它們。

+0

謝謝,但我會看看我是否可以修改孩子(遊戲代碼不是很容易這樣做,但我將不得不考慮它)。我在網上看到的有關遊戲的例子與出於某種原因重新創建它們類似。 – 2011-04-08 00:03:39