我构建了一个 C# WPF 应用程序,其中:
- 它有一个系统托盘图标。
- 它可以接受命令行参数
--minimize-to-tray
,使窗口在应用程序启动时从任务栏隐藏,要打开它,我们必须双击系统托盘图标或右键单击该图标并选择“打开”。 - 应用启动时,窗口位置应位于屏幕中央。
我的窗口只有一个,即 MainWindow,我在其 XAML 上设置了
WindowStartupLocation="CenterScreen"
使窗口位于屏幕中央。
一切都很棒。在没有参数的正常情况下,应用程序居中。
...但是,不适用于这个:当我使用参数 --minimize-to-tray
运行应用程序并双击系统托盘图标以显示窗口时,它不是居中。
这是我接受参数及其相关操作的代码:
...
/// <summary>
/// MainWindow constructor
/// <summary>
public MainWindow()
{
InitializeComponent();
InitializeAppArguments();
...
}
/// <summary>
/// Initialize actions that are associated with application's arguments.
/// </summary>
public void InitializeAppArguments()
{
string[] args = Environment.GetCommandLineArgs();
// Minimize window on app startup to tray
// if user put first argument "--minimize-to-tray" on the app
//
if (args.Length >= 2)
{
if (args[1] == "--minimize-to-tray")
{
this.WindowState = WindowState.Minimized;
this.Hide();
this.StateChanged += MainWindow_StateChanged;
}
}
}
...
/// <summary>
/// Hide app's window from taskbar whenever user minimize the app window.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void MainWindow_StateChanged(object sender, EventArgs e)
{
// When app's window is minimized, hide it from taskbar
//
if (this.WindowState == WindowState.Minimized)
{
this.Hide();
}
}
双击系统托盘图标或单击图标的“打开”上下文菜单上的事件处理程序:
/// <summary>
/// Open/show application when user click on "Open" context menu on application's system tray icon.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void MenuOpen_Click__SysTrayIcon_DoubleClick(object sender, EventArgs e)
{
this.Show();
this.Focus();
this.WindowState = WindowState.Normal;
}
那么,为什么在应用程序启动时隐藏显示窗口时窗口不居中呢?我在这里做错了什么吗?
如有任何帮助,我们将不胜感激。
最佳答案
根据这个solution :
It is necessary to set WindowState to Normal before setting window location.
显然,它还可以防止窗口出现不居中的情况。我的错误是,在隐藏窗口之前,我将 WindowState 设置为“最小化”,这使得窗口不居中。
因此,为了解决这个问题,我将行 this.WindowState = WindowState.Minimized;
更改为 this.WindowState = WindowState.Normal;
。
public void InitializeAppArguments()
{
string[] args = Environment.GetCommandLineArgs();
// Minimize window on app startup to tray
// if user put first argument "--minimize-to-tray" on the app
//
if (args.Length >= 2)
{
if (args[1] == "--minimize-to-tray")
{
this.WindowState = WindowState.Normal; // Fixed the problem
this.Hide();
this.StateChanged += MainWindow_StateChanged;
}
}
}
关于当应用程序启动时从隐藏状态显示时,C# WPF 窗口未位于中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842674/