我有一个自定义控件,需要通知父级的布局更改。因此,如果父母重新安排孩子,我想计算新的视觉位置。不幸ArrangeOverride
的是,孩子不会被调用,这是有道理的,因为在孩子控件内部的位置并没有真正改变。现在在布局过程中,我的自定义控件被正确定位但ArrangeOverride
没有被调用。为了让您更清楚地了解我想要实现的目标:我有一个控件,它模糊了背景产生类似航空玻璃的效果。为了实现这一点,我的控件将背景控件渲染到可视画笔中,并计算该画笔的视图框以使背景发光,然后通过模糊效果对其进行模糊处理。只要布局没有改变,它就可以正常工作。如果是这样,我需要更新画笔。我在 ArrangeOverride 方法中做到了这一点。
ArrangeOverride
因此,我尝试使用MeasureOverride
Invalidating 或 Parent 无效的各种组合。起初我继承自ContentControl
但将其更改为Decorator
,认为装饰器可能有一些特殊行为无用。我想尽可能地避免LayoutChanged
,因为它是一个非常非常邪恶的事件。我会给你一些代码,但它没有什么特别之处,我认为这是一个相当基本的问题,并没有真正绑定到我的代码。顺便说一下,布局器可以是任何东西(不仅仅是画布)。那么我必须通过什么事件、方法或方式来告知父母告诉我的控制“我知道你没有改变任何东西,但我确实重新定位了你”。