0

我目前尝试为类似绘画的 WPF 应用程序创建类。我必须基类 LineMovement(从 StartPoint 到 EndPoint 的线)和 PathMovement(穿过 PointCollection 类型的属性 Points 中指定的所有点的线)。这些类从 Control 继承并通过 ControlTemplate 获得它们的外观。

ControlTemplate 还将 Adorner 添加到 Movement 对象的 AdornerLayer 中,其中包含用于特定线的每个可移动点的小视觉标记。这些标记支持用鼠标拖动。

我遇到的问题是,我的运动类在移动它们的点时不会重新绘制。我用 Mole 调试了我的代码,发现用于可视化线条的折线获取了更改的点值(在其 Points 属性中可见),但它只是没有重新绘制。

如何强制重绘 WPF 控件?

4

3 回答 3

1

原来 TemplateBinding 是纯粹的邪恶。

当我通过 {TemplateBinding Points} 绑定折线的点时,它不会自行更新,而当我使用 {Binding RelativeSource={RelativeSource TemplatedParent}} 绑定它时,它可以完美运行。

提醒自己:永远不要再使用这个该死的 TemplateBinding。

于 2009-08-27T12:07:40.887 回答
1

TemplateBinding 不支持双向数据绑定(即使用折线的新值更新 Points 集合)。它仅适用于在控件模板中使用的单向数据绑定。请参阅 Bea Stollnitz 的博客条目:http ://bea.stollnitz.com/blog/?p=38

于 2010-02-09T17:44:58.927 回答
0

您需要使您的运动对象的 DP 具有 AffectsArrange 元数据属性(http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx) - 这样当属性更改时,WPF 就知道了应该重绘

于 2009-08-25T05:28:04.733 回答