「Xamarin.MacでDockアイコンを非表示にする」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator 細 (Administrator がページ「Xamarin.Mac/Dockアイコンを非表示にする」を「Xamarin.MacでDockアイコンを非表示にする」に移動しました) |
2019年5月22日 (水) 05:14時点における最新版
Mac OS Xのシステムステータスバー(Windowsでいうタスクトレイ)にアイコンを表示する、いわゆる常駐アプリケーションではドック(Windowsでいうタスクバー)のアイコンは非表示にしたい。
実装1[編集 | ソースを編集]
プリファレンスファイルで設定する[1]。
- info.plistファイルを開く
- 下部にあるタブで「ソース」を選ぶ
- 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]。