gpt4 book ai didi

wpf - 如何修复 WPF 表单调整大小 - 控件滞后和黑色背景?

转载 作者:行者123 更新时间:2023-12-03 11:01:57 24 4
gpt4 key购买 nike

我有一个非常简单的 WPF 窗口——其中唯一的东西是一个右对齐的按钮。当我通过拖动左边界来调整窗口大小时,按钮会跳来跳去 - 很多。自己试试,来回拖动左边界。

此外,在调整大小期间,黑色背景会暂时暴露。

this问题,我问了一个关于 Windows 窗体的类似问题。我得到的唯一答案是 WPF 中已修复此问题,但是,令人惊讶的是,它不仅没有修复,而且 WPF 还添加了第二个视觉错误 - 临时黑色背景。

这是控制延迟的样子;当我通过顶部边框调整窗口大小时会发生这种情况(使用相机记录,因为屏幕帽通过使一切变慢而使其不那么明显):

enter image description here

黑色边框示例:这是在调整窗口大小时捕获的;它只是一瞬间的样子,但非常引人注目:

enter image description here

难道我做错了什么?如何在调整大小期间让我的控件在视觉上保持在一个地方?如何避免黑边?

备注 :按钮最终会出现在正确的位置 - 它只会在调整大小期间短暂地跳动。

最佳答案

这是基于 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);
}

关于wpf - 如何修复 WPF 表单调整大小 - 控件滞后和黑色背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com