我在WPF Windows上有几个列表框,表单上设置了Height="Auto" Width="Auto"
表单在不同的分辨率下完美无损,但问题是当我按下最大化按钮时,在表单调整大小时可以看到厚的“黑色L”。我已经在很多WPF应用程序中看到了这一点,但直到现在还没有解决问题。
当窗体上的控件调整大小时,有没有办法DoubleBuffer窗口,或调用WPF中的SuspendLayout()?我怎么能摆脱这个丑陋的黑色L?
答案 0 :(得分:3)
引用最近的一个Hanselminutes:
Ian Griffiths:......有win32提示 这是一个普通的win32消息循环,WPF汇集了消息 脱离它并把它们放在它自己的上面 提示,然后自己处理它 甜蜜的时光,部分是因为它想要 能够重新排序事件 进来。它将优先考虑某些 以上输入处理的东西,用于 顺便说一句,这就是原因 你会得到一些奇怪的重画 处理调整WPF应用程序的大小, 你可能已经注意到你得到了一点点 出现一点空白 在调整窗口大小时暂时 这是因为它承认了 事实上真的调整事件大小 做任何事情,然后是 油漆发生有点不同步 通常有什么。所以那里 是一个win32消息队列,但事实并非如此 实际上是WPF中的主要消息队列 这就是所有类型的实现 调度员试图隐藏的详细信息 尽可能多的关于它。
这似乎与您的问题相关,但我不知道完整的解决方案。 也许,您应该尝试更改一些Dispatcher优先级?
答案 1 :(得分:0)
Vault,我认为这可能与列表框执行的UI虚拟化有关。虚拟化允许列表框仅加载正在呈现的UI元素。列表框在VirtualizingStackPanel的帮助下作为ItemsPanelTemplate。
所以我的猜测似乎是......最大化窗口会推动列表框生成更多的UI元素,延迟会产生黑色'L'。
您可以删除虚拟化并检查是否仍然显示黑色“L”。顺便说一句,虚拟化实际上是一个“好”的东西,关闭它通常是一个坏主意。