LayoutUpdated事件并不能提供任何帮助。它是在完成整个布局后,与Dispatcher
相关联的所有UI元素上触发的事件,也就是说工作已经完成了。
根据您的目标,您有几个选择。
隐藏元素
如果您不想让元素可见或执行任何布局,则可以将其Visibility
属性设置为Collapsed
。当它被折叠时,它应该跳过大部分布局逻辑和所有渲染逻辑。
删除元素
从可视树中删除元素是确保它不执行任何操作的方法。如果需要,您可以稍后再添加它。如何执行此操作取决于您的代码当前的设置方式。
降低元素性能成本
如果元素很昂贵,因为它正在执行许多工作,则可以考虑优化它,和/或在您不希望它执行工作的时间内断开其事件侦听器和绑定。
暂停UI处理
如果您要在执行某些操作时暂时暂停所有UI处理(以防止重入),则可以使用Dispatcher.DisableProcessing。请注意,这将禁用整个线程的UI处理,而不仅仅是特定元素的处理。
using (Dispatcher.DisableProcessing())
{
}
元素的静态图片
如果您想要永久禁用一个元素的所有处理,我不知道有什么方法可以保持其在屏幕上可见。但是,您可以使用RenderTargetBitmap将元素呈现为 ImageSource
,然后用 Image 元素替换原始元素,使其 Source
属性设置为位图。
RenderTargetBitmap target = new RenderTargetBitmap((int)element.RenderSize.Width, (int)element.RenderSize.Height, 96.0, 96.0, PixelFormats.Default);
target.Render(element);
image.Source = target;
现在,您基本上拥有了一个“图片”,它代替了原始元素的位置。