Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制重新绘制WPF控件_Wpf_Controls_Repaint - Fatal编程技术网

强制重新绘制WPF控件

强制重新绘制WPF控件,wpf,controls,repaint,Wpf,Controls,Repaint,我目前正在尝试为类似paint的WPF应用程序创建类。我必须基类LineMovement(从起点到终点的线)和PathMovement(穿过PointCollection类型的属性点中指定的所有点的线)。这些类从控件继承,并通过ControlTemplate获得它们的外观 ControlTemplate还向运动对象的AdornerLayer添加了一个装饰器,其中包含一个小的视觉标记,用于特定直线的每个可移动点。这些标记支持使用鼠标拖动 我遇到的问题是,我的移动类在移动点时不知何故不会重新绘制。我

我目前正在尝试为类似paint的WPF应用程序创建类。我必须基类LineMovement(从起点到终点的线)和PathMovement(穿过PointCollection类型的属性点中指定的所有点的线)。这些类从控件继承,并通过ControlTemplate获得它们的外观

ControlTemplate还向运动对象的AdornerLayer添加了一个装饰器,其中包含一个小的视觉标记,用于特定直线的每个可移动点。这些标记支持使用鼠标拖动

我遇到的问题是,我的移动类在移动点时不知何故不会重新绘制。我用Mole调试了我的代码,发现用于可视化直线的多段线获得了更改的点值(在其Points属性中可见),但它只是不重新绘制


如何强制重新绘制WPF控件?

您需要使移动对象的DPs具有AffectsArrange元数据属性()-这样,当属性更改时,WPF知道应该重新绘制

结果表明TemplateBinding纯粹是邪恶的

当我用{TemplateBinding Points}绑定多段线的点时,它不会更新自身,而当我用{Binding RelativeSource={RelativeSource TemplatedParent}绑定它时,它工作得非常好


请注意:不要再使用这个该死的TemplateBinding。

TemplateBinding不支持双向数据绑定(即使用多段线的新值更新点集合)。它仅用于控制模板中使用的单向数据绑定。请参阅Bea Stollnitz的博客:

已经尝试过了。这仍然没有帮助:(.真正奇怪的是,当我使用Mole查看表示运动的多段线时,它的点集合显示了已更改的点,但没有重新绘制。当我使用Mole进行“编辑”(也就是在不做任何更改的情况下提取字符串并按下“保存”按钮)时它应重新绘制的多段线的点集合。