【发布时间】:2023-04-04 17:27:01
【问题描述】:
我想在用户看到或使用该程序之前从他们那里获得一些信息。目前我只有一个黑色矩形隐藏我的 GUI,前面有一个文本框。当信息输入到框中时,我将它和矩形的可见性设置为折叠。
我只在程序开始时才需要它们,并且我假设它们仍然存在并在折叠时占用内存。一旦我对它们没有用处,有没有办法完全删除它们?
【问题讨论】:
标签: c# .net wpf user-interface
我想在用户看到或使用该程序之前从他们那里获得一些信息。目前我只有一个黑色矩形隐藏我的 GUI,前面有一个文本框。当信息输入到框中时,我将它和矩形的可见性设置为折叠。
我只在程序开始时才需要它们,并且我假设它们仍然存在并在折叠时占用内存。一旦我对它们没有用处,有没有办法完全删除它们?
【问题讨论】:
标签: c# .net wpf user-interface
为什么不弹出一个模态窗口,然后当它关闭时,它会自动从视觉/逻辑树中删除
例如
Window win = new MyPopupWindow();
win.ShowDialog();
【讨论】:
使用某种标准 UI 元素,如上面建议的模态窗口或 silverlight 中的 ChildWindow 会更好。
但是,折叠的元素不会给您带来任何内存问题,它们会从渲染管道中取出。 Opacity = 0 会一直存在。 如果你真的想删除它,父 Panel(例如 Grid)有一个带有 Remove() 方法的 Children 集合。
【讨论】:
您可以使用用于启动画面的技术来做到这一点,如下例所示。
两个区别:
使用 ShowDialog() 代替 Show() 使窗口模块化(始终在顶部并冻结执行)。
在 main.thread 上运行,而不是在单独的线程上运行。
例子:
Hide WPF Window Until Fully Loaded
但是,您可能需要考虑重新考虑您的方法,因为它似乎对用户不友好。
【讨论】: