我在 WPF 项目中有以下 C# 代码:
private static void RunConfig(string owner)
{
long ownerHandle;
var settingsWindow = new SettingsWindow();
if (long.TryParse(owner, out ownerHandle))
{
WindowInteropHelper helper = new WindowInteropHelper(settingsWindow);
helper.Owner = new IntPtr(ownerHandle);
}
settingsWindow.ShowDialog();
}
SettingsWindow 与所有者窗口的模式不正确(即,当 SettingsWindow 仍处于打开状态时,我可以专注于、与之交互甚至关闭所有者窗口)。我究竟做错了什么?
对于上下文,此代码是屏幕保护程序的一部分,所有者窗口是控制面板屏幕保护程序选择窗口(通过命令行参数传递句柄以用作所有者)。我知道 IF 语句正在评估真实并正确解析句柄。
我也尝试过使用SetWindowLongPtr
来自user32.dll
(为 x64 编译,因此不使用)的方法,这里SetWindowLong
简要描述并在此处使用中显示。此方法适用于 WinForms,但似乎不适用于 WPF。帮助我欧比旺克诺比,你是我唯一的希望。