在基于 XAML 的应用程序中,我经常需要操作屏幕元素、调整大小或移动内容。这种情况通常出现在非常自定义的 UI 控件中。
东西加载和数据绑定等的时间可能会引起恼人的时间问题。
传统上,我和我的同事通过将工作“重新分派”到 UI 线程来解决这些问题,以便在依赖属性处于“最终”状态时稍后运行。
有一个更好的方法吗?您发现哪些策略有效?
LayoutUpdated 事件可能非常嘈杂、细粒度,并且取消注册需要放弃一个方法的 Lambda,因此无法从外部逻辑访问封闭的变量 - 它有点像“母马”。
编辑
我举一个具体的例子。进行面部识别时,自定义控件会在面部周围绘制轮廓,因此我们在这里讨论的是完全自定义的东西,XAML 没有开箱即用。
图像需要缩放和调整大小,路径和几何图形也需要缩放和调整大小,以使其全部对齐。
当以编程方式更改元素的高度和宽度时,影响不是立竿见影的,只有当 UI 线程被放弃回 XAML 框架后,渲染子系统才会重新排列所有内容。
因此,依赖于更改值的逻辑需要在框架重新安排所有内容之后运行,因此这项工作需要稍后在 UI 线程上进行调度,因此求助于调度。它闻起来臭臭的。
许多事件和虚拟事件有时会在必要数据尚不可用时被调用。有时,需要在数据到达时完成工作(即属性更改通知),这通常不会触发 XAML 布局事件。在这种情况下,我们求助于调度程序黑客。