我目前正在制作一个稍微复杂的装饰师 . 当用户缩放时,这个将仅在一个维度上变换 . 不幸的是,这对它周围漂亮的1px发线边界造成了严重破坏(我希望它仍然是一个很好的发际边界 - 即使在转型的维度) .
这是我对问题的诊断:
假设我将缩放变换应用于装饰的UIElement . WPF然后调用以下内容
-
装饰UIElement的ArrangeCore()
-
Adorner的MeasureOverride()
-
Adorner's ArrangeOverride()
-
Adorner的OnRender()
-
Adorner的GetDesiredTransform(...)
最后两个似乎对我不利 . 如果我正确地读这个,那就意味着,当我覆盖GetDesiredTransform时,它太迟了 . 是的,我确实可以扩展/翻译/倾斜我的装饰,但问题是:如果我想如上所述做什么,即仅在一个维度上缩放并在装饰者上保持1px细线边界?好吧,我不能,可以吗?
如果我要使用装饰品,在我看来,我必须将它们分成单独的装饰品 - 那些将要扩展的装配工和那些不装配的装配工 . 好像很多工作 . 我在这里的通话顺序上遗漏了什么吗?我想我可以一直触发OnRender从视觉树到叶子,但这看起来像是大规模的矫枉过正 .
1 回答
您可以将边框与装饰者的内容分开 .
内容转换,不涉及边界 .
你能发布你的装饰模板的样子吗?