2

wpfアプリケーション通知アイコンで使用したい(プロジェクトhttp://www.codeproject.com/Articles/36468/WPF-NotifyIconの.dllライブラリを使用)。

しかし、トレイアイコンをダブルクリックしてウィンドウを表示する方法(トレイに最小化した後)はわかりません。

新しいコマンドを宣言しました

namespace MyBasicFlyffKeystroke
{
    class ShowWindowCommand : ICommand
    {
        public void Execute(object parameter)
        {
            Window1 window = new Window1();
            window.Show();
        }

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;
    }
}

そして、window1.xamlファイルでそれを使用しました:

<tb:TaskbarIcon x:Name="notifyIcon" IconSource="icon.ico" ToolTipText="MyBasicFlyffKeystroke" 
    DoubleClickCommand="{StaticResource ShowWindow}">                    
</tb:TaskbarIcon>

<Grid.Resources>
    <my:ShowWindowCommand x:Key="ShowWindow" />
</Grid.Resources>

しかし、ダブルクリックした後、Window1で新しいインスタンスを開きます...ここに何か方法はありますか?

よろしく、ダグナ

4

2 に答える 2

3

ウィンドウ メッセージのイベント ハンドラを追加してみてください

指示

namespace MyBasicFlyffKeystroke
{
    class ShowWindowCommand : ICommand
    {
        public void Execute(object parameter)
        {
            // Broadcast isn't a good idea but work...
            NativeMethods.PostMessage((IntPtr)NativeMethods.HWND_BROADCAST, NativeMethods.WM_SHOWME, IntPtr.Zero, IntPtr.Zero);
        }

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;
    }
}

ウィンドウ1で

protected override void OnSourceInitialized(EventArgs e) {
    base.OnSourceInitialized(e);
    HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
    source.AddHook(WndProc);
}

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
    if (msg == NativeMethods.WM_SHOWME) {
        WindowState = WindowState.Normal;
    }
    return IntPtr.Zero;
}

そしてNativeMethodsで(更新)

public static readonly int HWND_BROADCAST = 0xffff;
public static readonly int WM_SHOWME = RegisterWindowMessage("WM_SHOWME");

[DllImport("user32.dll")]
public static extern int RegisterWindowMessage(string message);

[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
于 2012-07-04T14:25:34.690 に答える
1
Application.Current.Window1.Show();

これは私のために働いた

于 2017-01-04T17:26:11.673 に答える