当应用程序启动时隐藏状态显示C#WPF窗口时,它不会位于中心

时间:2017-01-25 03:02:23

标签: c# wpf xaml window

我已经构建了一个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;
}


那么,为什么窗口在应用程序启动时隐藏显示时不会居中?我在这里做错了吗?

任何帮助都将不胜感激。

1 个答案:

答案 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;
        }
    }
}