9

私のアプリケーションにはトレイ アイコンがあり、ダブルクリックするとアプリケーション ウィンドウが表示または非表示になります。私の問題は、ウィンドウが非表示のときに最小化された状態にある場合、ウィンドウを前面に表示できないように見えることです。

たとえば、ユーザーがアプリケーションを最小化してから、トレイ アイコンをダブルクリックしたとします。アプリケーション ウィンドウが非表示になり、タスクバーから消えます。ユーザーがトレイ アイコンを再度ダブルクリックすると、アプリケーション ウィンドウが表示されます。つまり、最小化された状態から復元され、最前面に表示されます。

以下のコードはまさにそれを行うべきですが、何らかの理由でそうしません:

private void TrayIcon_DoubleClick(object sender, EventArgs e)
{
    if (this.Visibility == Visibility.Hidden)
    {
        this.Visibility = Visibility.Visible;
        this.WindowState = WindowState.Normal;
        this.Activate();
    }
    ...
}

アプリケーションは最小化されたままになり、最前面には表示されません。Activate()は true を返し、その後TrayIcon_DoubleClick()を呼び出すと、状態が実際にNormalに設定されていることが示されます。

4

3 に答える 3

15

MSDN フォーラムに質問を投稿したところ、そこで回答が得られました。答えを引用するには:


複雑なアクションを発生させるという意味で、よりメソッドに似た Window の一部のプロパティは、前のアクションが既に完了した後に発生する必要があります。これを実現する 1 つの方法は、 を使用することですDispatcher.BeginInvoke。コードを次のように変更すると、動作するはずです。

if (this.Visibility == Visibility.Hidden)
{
    this.Visibility = Visibility.Visible;
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        new Action(delegate()
        {
            this.WindowState = WindowState.Normal;
            this.Activate();
        })
    );
}

私はこれを試してみましたが、問題は解決しました。また、省略してもいいと思いますthis.Activate()

于 2010-03-06T16:06:40.200 に答える
1

私はより良い方法を見つけました。ウィンドウの可視性とウィンドウの状態を変更すると問題が発生するため、可視性の代わりに ShowInTaskBar プロパティを変更します。とにかく、最小化されたウィンドウShowInTaskBar = trueは隠しウィンドウのようなものです。

于 2011-09-20T14:05:25.167 に答える