我有按“ X”按钮时需要隐藏(不关闭)的WPF程序。
并行地,在某个按钮上有一个c#程序需要取消隐藏它。
隐藏WPF程序效果很好。 问题是,当试图从其他c#进程中取消隐藏它时,WPF窗口显示为黑色(好像窗体本身在显示窗口时仍处于隐藏状态)。
有什么想法吗?
尝试更改ShowWindow()函数上的标志,没有帮助。 试图不隐藏WPF窗口,而是更改可见性,结果相同。
用于隐藏主窗口的WPF代码:
void MainWindow_Closing(object sender, CancelEventArgs e)
{
e.Cancel = true;
Hide();
}
c#代码:
var myHandle= UIWin32.FindWindow(null, "My title");
UIWin32.ShowWindow(myHandle, UIWin32.Win32Flags.SW_SHOW);
UIWin32.ShowWindow(myHandle, UIWin32.Win32Flags.SW_RESTORE);
UIWin32.SetForegroundWindow(myHandle);
答案 0 :(得分:0)
在ShowWindow
之后,您可以使用带有重绘标志的MoveWindow函数,如下所示:
MoveWindow(handle,0,0,width,height,true);
签名:
[DllImport("User32.dll")]
extern bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw);
答案 1 :(得分:0)
通过查看Window.Hide()的参考源,似乎“隐藏”既将窗口的Visibility
属性设置为Visibility.Hidden
,又用ShowWindow(..., SW_HIDE
隐藏了窗口的源窗口。
使用ShowWindow(myHandle, SW_HIDE)
确实显示了源窗口,但是Visibility
属性仍然是Visibility.Hidden
,这就是为什么什么都没画出来的原因。 Window
类中的所有内容似乎都无法检查窗口是否在外部重新显示。
但是Window
类将对WM_ACTIVATE
生成的SetForegroundWindow()
消息作出反应;发生这种情况时,它将调用OnActivated()
方法。因此,以下代码将在激活后在WPF窗口上重置Visibility
:
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
Show();
}