Xamarin.Mac/Dockアイコンを非表示にする

提供: MonoBook
移動: 案内検索

Mac OS XシステムステータスバーWindowsでいうタスクトレイ)にアイコンを表示する、いわゆる常駐アプリケーションではドックWindowsでいうタスクバー)のアイコンは非表示にしたい。

実装1[編集]

プリファレンスファイルで設定する[1]

  1. info.plistファイルを開く
  2. 下部にあるタブで「ソース」を選ぶ
  3. Add new entryをクリックして以下の一行をする
    • プロパティに「LSUIElement」(Application is agentと表示される)
    • 型に「Boolean」
    • 値に「Yes」

実装2: 動的に制御する[編集]

info.plistでドックアイコンを非表示にする方法では常に非表示になってしまい使いにくい場面も多い。 ソースコードで動的に制御できると捗る。

NSApplicationインスタンスのActivationPolicyプロパティに、「Accessory」または「Prohibited」を設定するとドックアイコンが非表示になり、「Regular」を設定するとドックアイコンが表示になる。

    public partial class AppDelegate : NSApplicationDelegate
    {
        // 〜〜〜中略〜〜〜
 
        public override void DidFinishLaunching(NSNotification notification)
        {
            var app = NSApplication.SharedApplication;
            app.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
        }
    }

上記の例ではAppDelegateのDidFinishLaunchingメソッドでドックアイコンを消しているがこれに限らず、たとえばNSApplicationのインスタンスを生成しているMainメソッドでいきなり叩いても動くようだ(NSApplication.Initメソッド呼び出し後であればどこでも良いようだ)。

    static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();
 
            var application = NSApplication.SharedApplication;
            application.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
            application.Delegate = new AppDelegate();
            application.Run();
        }
    }

その他[編集]

Xamarin.MacではHIServices.frameworkが使えないのでソースコードレベルで動的に制御することはできない[2]

関連項目[編集]

参考文献[編集]