2009-08-24 227 views
0

我目前嘗試爲類似油漆的WPF應用程序創建類。我必須基類LineMovement(從StartPoint到EndPoint的線)和PathMovement(線經過屬性Points PointCollection中指定的所有點)。這些類從Control繼承,並通過ControlTemplate獲取它們的外觀。強制重繪WPF控件

ControlTemplate還向AdornerLayer的AdornerLayer中添加了一個AdornerLayer,該AdornerLayer包含特定行的每個可移動點的一些可視標記。這些標記支持用鼠標拖動。

我遇到的問題是,我的運動類別在點移動時不會重新繪製。我使用Mole調試了我的代碼,發現用於可視化線的Polyline獲取已更改的點值(在其Points屬性中可見),但它不會重新繪製。

如何強制重繪WPF控件?

回答

1

TemplateBinding不支持雙向數據綁定(即使用Polyline的新值更新Points集合)。它僅用於在控制模板中使用的單向數據綁定。見Bea Stollnitz的博客文章:http://bea.stollnitz.com/blog/?p=38

0

你需要讓你的運動對象的移民有AffectsArrange元數據屬性(http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx) - 當屬性發生變化,WPF知道它應該重新繪製

+0

已經嘗試過。它仍然沒有幫助:(。 真的很奇怪的是,當我使用Mole來查看錶示Point集合顯示改變的點但它沒有重新繪製的運動的Polyline時,當我使用Mole來「編輯「(又名採取字符串沒有任何改變,並按下」保存「按鈕)它重新繪製的折線PointsCollection,因爲它應該。 – chrischu 2009-08-25 10:28:54

1

原來,TemplateBinding是純粹的邪惡的方式。

當我通過{TemplateBinding Points}綁定Polyline的點時,它不會自我更新,而當我使用{Binding RelativeSource = {RelativeSource TemplatedParent}}綁定它時,它完美地工作。

請注意:不要再次使用這個該死的TemplateBinding。