我有一个自定义类,它扩展了名为 VisualCanvas 的内置 WPF Canvas,它是应用程序 grpahics 的主要内容区域。我有另一个扩展 Canvas 的自定义类,称为 SharedTransformCanvas,它将用于主要内容之上的装饰。SharedTransformCanvas 没有设置背景颜色,因此鼠标事件等通常由 VisualCanvas 处理。两个画布都具有变换依赖属性,并绑定到暴露另一个对象变换的视图模型,即画布共享一个变换。两个画布都在 ScrollViewer 中的一行的网格内。
用户可以在主画布中滚动鼠标滚轮以进行缩放。这会影响两者之间共享的转换,因为我希望装饰以与主要内容相同的方式缩放,这通常有效,即装饰具有同步缩放。
问题是当用户放大然后滚动条应该出现并且它们没有所以我覆盖了VisualCanvas上的MeasureOverride,以便考虑到比例变换并报告更大的尺寸并使滚动条出现。这解决了当用户放大时出现滚动条的问题,但在用户放大到足以使滚动条出现时,顶部 SharedTransformCanvas 的内容似乎突然忽略了变换并跳回到未应用变换的大小。我还尝试覆盖 SharedTransromCanvas 中的 MeasureOverride 以以相同的方式考虑转换并报告更大的尺寸,但这并不能解决问题。
如果我删除滚动查看器,同步缩放似乎可以正常工作,但是一旦您缩放得太远,您就会错过屏幕上的一些内容并且无法滚动。
我不明白滚动查看器如何与顶部画布感知它的转换进行交互?谁能解释这种行为?