WPF C#中如何将已存在的指定窗口置于前台并获取焦点
WPF 单实例窗口前置解决方案
你当前的代码已经实现了阻止打开多个About窗口的逻辑,要补充“已打开时将窗口前置获焦”的功能,只需要调整窗口实例的获取方式,再对已存在的窗口进行状态恢复和激活操作:
修改后的完整代码:
private void Button_Click(object sender, RoutedEventArgs e) { // 获取已打开的About窗口实例(而非仅判断是否存在) var existingWindow = Application.Current.Windows.OfType<About>().FirstOrDefault(); if (existingWindow == null) { About p = new About(); p.Show(); } else { // 若窗口处于最小化状态,先恢复正常显示 if (existingWindow.WindowState == WindowState.Minimized) { existingWindow.WindowState = WindowState.Normal; } // 激活窗口,将其置于前台并获取焦点 existingWindow.Activate(); } }
关键说明:
- 用
FirstOrDefault()替代Any(),可以直接拿到已打开的About窗口实例,方便后续操作 - 先判断窗口是否最小化,避免激活后窗口仍停留在任务栏的情况
Activate()是WPF窗口的原生方法,会将窗口带到前台并赋予焦点,完全匹配需求
内容的提问来源于stack exchange,提问作者Karls
相关产品推荐
相关产品推荐

