我已经构建了一个C#WPF应用程序,其中:
--minimize-to-tray
,以便在应用程序启动时隐藏任务栏窗口,打开它我们必须双击sys托盘图标或右键单击图标并选择"开" 我的窗口只有一个,即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();
}
}
系统托盘图标上的事件处理程序双击或单击&#34;打开&#34;图标的上下文菜单:
/// <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;
}
那么,为什么窗口在应用程序启动时隐藏显示时不会居中?我在这里做错了吗?
任何帮助都将不胜感激。
答案 0 :(得分:1)
根据solution:
在设置窗口位置之前,必须将WindowState设置为Normal。
显然,它也可以防止窗口显示为未经插入。我的错误是在隐藏窗口之前,我将WindowState设置为Minimized,这使窗口不受影响。
因此,为了解决这个问题,我将行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;
}
}
}