gpt4 book ai didi

c# - parent 通知 child 职位已更改

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:37 25 4
gpt4 key购买 nike

我有一个自定义控件,需要从父级通知布局更改。所以如果 parent 重新布局 child ,我想计算新的视觉位置。不幸的是,子控件上的 ArrangeOverride 不会被调用,这是有道理的,因为子控件内的位置并没有真正改变。现在在布局过程中,我的自定义控件已正确定位,但未调用 ArrangeOverride。为了让您更清楚地了解我要实现的目标:我有一个控件,that blurs the background给人一种毛玻璃般的效果。为实现这一点,我的控件将背景控件渲染到视觉画笔中,并计算该画笔的视框以使背景闪耀,然后通过模糊效果使其模糊。只要布局不变,它就可以正常工作。如果是这样,我需要更新画笔。我在 ArrangeOverride 方法中执行了此操作。

所以我尝试使用 ArrangeOverrideMeasureOverride,以及 Invalidating 或 Parent invalidating 的各种组合。起初我继承自ContentControl,但将其更改为Decorator,认为Decorator可能有一些特殊的行为没有用。我想尽可能避免 LayoutChanged 因为它是一个非常非常邪恶的事件。我会给你一些代码,但它没有什么特别之处,我认为它是一个相当基本的问题,并没有真正绑定(bind)到我的代码。顺便说一句,布局器可以是任何东西(不仅是 Canvas )。那么我必须通过什么事件、方法或方式来通知 parent 告诉我的控制“我知道你没有改变任何东西,但我确实重新定位了你”。

最佳答案

所以我以一种我不太满意的方式修复了它,但它解决了很多其他不必要的东西只是为了让它工作,比如当模糊控件本身是动画的时候。所以这个解决方案现在适用于任何发生的事情。虽然我避免了 LayoutUpdated 事件,但我使用了类似的“邪恶”事件。 CompositionTarget.Rendering 所以在 Loaded 事件中,我注册到渲染事件,在 Unloaded 中我从渲染事件中注销。这样一来,调用LoadedUnloaded 的频率就无关紧要了。在渲染事件本身中,我只是触发了我的 VisualBrush.Viewbox 失效代码。这工作得很好,即使事件被触发了很多。我不经常使用模糊,所以它不会对性能产生太大影响......目前。

关于c# - parent 通知 child 职位已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com