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]

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]