我有一个非常简单的 WPF 窗口 - 其中唯一的东西是一个右对齐按钮。当我通过拖动左边界来调整窗口大小时,按钮会跳很多次。自己尝试一下,来回拖动左侧边界。
此外,在调整大小期间,黑色背景会暂时暴露。
In this https://stackoverflow.com/questions/1333425/how-to-prevent-controls-visually-lagging-behind-on-resize-inside-tablelayoutpanel问题,我问了一个关于Windows Forms的类似问题。我得到的唯一答案表明这个问题在 WPF 中已修复,然而,令人惊讶的是,它不仅没有修复,而且 WPF 还添加了第二个视觉错误 - 临时黑色背景。
这是控制滞后的样子;当我通过顶部边框调整窗口大小时会发生这种情况(用相机记录,因为屏幕盖使一切变慢而使其不那么明显):
黑色边框示例:这是在调整窗口大小时捕获的;虽然只有一瞬间,但非常明显:
难道我做错了什么?如何在调整大小期间使控件在视觉上保持在一个位置?如何避免黑色边框?
Note:按钮最终位于正确的位置最终- 它只会跳来跳去briefly在调整大小期间。
这是基于 Wieser Software Ltd 的第二个解决方案的完整工作代码。
public partial class MainView : Window
{
public MainView()
{
InitializeComponent();
//ensure win32 handle is created
var handle = new WindowInteropHelper(this).EnsureHandle();
//set window background
var result = SetClassLong(handle, GCL_HBRBACKGROUND, GetSysColorBrush(COLOR_WINDOW));
}
public static IntPtr SetClassLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
{
//check for x64
if (IntPtr.Size > 4)
return SetClassLongPtr64(hWnd, nIndex, dwNewLong);
else
return new IntPtr(SetClassLongPtr32(hWnd, nIndex, unchecked((uint)dwNewLong.ToInt32())));
}
private const int GCL_HBRBACKGROUND = -10;
private const int COLOR_WINDOW = 5;
[DllImport("user32.dll", EntryPoint = "SetClassLong")]
public static extern uint SetClassLongPtr32(IntPtr hWnd, int nIndex, uint dwNewLong);
[DllImport("user32.dll", EntryPoint = "SetClassLongPtr")]
public static extern IntPtr SetClassLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
[DllImport("user32.dll")]
static extern IntPtr GetSysColorBrush(int nIndex);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)