我有一个非常简单的WPF窗口 - 它唯一的东西是右对齐按钮.当我通过拖动左边界来调整窗口大小时,按钮会跳转 - 很多.自己尝试一下,来回拖动左边界.
此外,在调整大小期间,黑色背景会暂时暴露.
在这个问题中,我问了一个关于Windows Forms的类似问题.我得到的唯一答案表明这在WPF中得到了修复,然而,令人惊讶的是,它不仅没有修复,而且WPF还增加了第二个视觉错误 - 临时黑色背景.
这是控制滞后的样子; 当我通过顶部边框调整窗口大小时会发生这种情况(使用相机录制,因为屏幕上限会使一切变慢,因此不太明显):
黑色边框的示例:在调整窗口大小时捕获此内容; 这只是一瞬间,但它非常引人注目:
难道我做错了什么?在调整大小期间,如何让我的控件在一个地方保持可视化?我怎样才能避开黑色边框?
注:该按钮在正确的位置结束了最后 -它只跳周围简要地调整大小时.
gho*_*ord 10
这是基于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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6393 次 |
最近记录: |