我目前正在研究一个稍微复杂的装饰器。当用户缩放时,这将仅在一个维度上进行转换。不幸的是,这对它周围漂亮的 1px 细线边框造成了严重破坏(我希望它保持漂亮的细线边框 - 即使在变换维度上也是如此)。
这是我对问题的诊断:
假设我对装饰的 UIElement 应用缩放变换。WPF 然后调用以下
- 装饰 UIElement 的 ArrangeCore()
- Adorner 的 MeasureOverride()
- 装饰者的 ArrangeOverride()
- Adorner 的 OnRender()
- Adorner 的 GetDesiredTransform(...)
最后两个对我来说似乎彻底倒退了。如果我没看错,这意味着,当我覆盖 GetDesiredTransform 时,为时已晚。是的,我确实可以缩放/平移/倾斜我的装饰器,但问题是:如果我想按照上述方式进行操作,即只缩放一个维度并在装饰器上保留 1px 的细线边框,该怎么办?好吧,我不能,可以吗?
如果我要使用装饰器,在我看来,我必须将它们分成单独的装饰器 - 那些会缩放的和不会缩放的。似乎工作量很大。我在这里的通话顺序方面是否遗漏了什么?我想我可以一直触发 OnRender,沿着视觉树一直到树叶,但这似乎是一种巨大的矫枉过正。