窗口上的WPF布局

时间:2009-09-10 16:13:05

标签: wpf layout controls resize rendering

我在WPF Windows上有几个列表框,表单上设置了Height="Auto" Width="Auto"

表单在不同的分辨率下完美无损,但问题是当我按下最大化按钮时,在表单调整大小时可以看到厚的“黑色L”。我已经在很多WPF应用程序中看到了这一点,但直到现在还没有解决问题。

当窗体上的控件调整大小时,有没有办法DoubleBuffer窗口,或调用WPF中的SuspendLayout()?我怎么能摆脱这个丑陋的黑色L?

2 个答案:

答案 0 :(得分:3)

引用最近的一个Hanselminutes

  Ian Griffiths:......有win32提示   这是一个普通的win32消息循环,WPF汇集了消息   脱离它并把它们放在它自己的上面   提示,然后自己处理它   甜蜜的时光,部分是因为它想要   能够重新排序事件   进来。它将优先考虑某些   以上输入处理的东西,用于   顺便说一句,这就是原因   你会得到一些奇怪的重画   处理调整WPF应用程序的大小,   你可能已经注意到你得到了一点点   出现一点空白   在调整窗口大小时暂时   这是因为它承认了   事实上真的调整事件大小   做任何事情,然后是   油漆发生有点不同步   通常有什么。所以那里   是一个win32消息队列,但事实并非如此   实际上是WPF中的主要消息队列   这就是所有类型的实现   调度员试图隐藏的详细信息   尽可能多的关于它。

这似乎与您的问题相关,但我不知道完整的解决方案。 也许,您应该尝试更改一些Dispatcher优先级?

答案 1 :(得分:0)

Vault,我认为这可能与列表框执行的UI虚拟化有关。虚拟化允许列表框仅加载正在呈现的UI元素。列表框在VirtualizingStackPanel的帮助下作为ItemsPanelTemplate。

所以我的猜测似乎是......最大化窗口会推动列表框生成更多的UI元素,延迟会产生黑色'L'。

您可以删除虚拟化并检查是否仍然显示黑色“L”。顺便说一句,虚拟化实际上是一个“好”的东西,关闭它通常是一个坏主意。