Adorner转换与像素宽度

时间:2017-03-14 15:52:47

标签: c# wpf adorner adornerlayer

我目前正在制作一个稍微复杂的装饰师。当用户缩放时,这个将仅在一个维度上变换。不幸的是,这对它周围漂亮的1px发线边界造成了严重破坏(我希望它仍然是一个很好的发际边界 - 即使在转型的维度上)。

这是我对问题的诊断:

假设我将缩放变换应用于装饰的UIElement。 WPF然后调用以下

  1. 装饰UIElement' ArrangeCore()
  2. Adorner的MeasureOverride()
  3. Adorner的ArrangeOverride()
  4. Adorner的OnRender()
  5. Adorner的GetDesiredTransform(...)
  6. 最后两个似乎对我不利。如果我正确读取此权限,则意味着,当我覆盖GetDesiredTransform时,它只是太少而不能延​​迟。是的,我确实可以扩展/翻译/倾斜我的装饰,但问题在于:如果我想如上所述做什么,即只在一个维度上缩放并在装饰者上保持1px细线边界?好吧,我不能,我可以吗?

    如果我要使用装饰品,我觉得我必须将它们拆分成单独的装饰品 - 那些将要扩展的装饰品和那些不合适的装饰品。好像很多工作。我在这里的通话顺序上错过了一些东西吗?我想我可以在视觉树下一直触发OnRender到叶子,但这看起来像是大规模的过度杀伤。

1 个答案:

答案 0 :(得分:0)

您可以将边框与装饰者的内容分开。

让内容转换,不涉及边界。

你能发布你的装饰模板的样子吗?