かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

UWPでWindowのアクティブ状態を取りたい

ほしいときにぱっととる事はできなさそうです。

ということで、Window.Current.CoreWindowのActivatedイベントでとっておく必要があります。

こんな感じで

// どこかでイベントを購読して
Window.Current.CoreWindow.Activated += CoreWindow_Activated;

// こんな感じで状態をとっておく
private CoreWindowActivationState State { get; set; }

private void CoreWindow_Activated(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.WindowActivatedEventArgs args)
{
    // アクティブかどうかの状態をフィールドあたりにとっておく
    this.State = args.WindowActivationState;
}

CoreWindowActivationState列挙体は、以下の値をもってます。

CoreWindowActivationState Enumeration (Windows)

  • CodeActivated: Activateによりアクティブ化された
  • Deactivated: 非アクティブ
  • PointerActivated: マウスやタッチでアクティブ化された

この値を見ることで、アクティブかどうかが判定できます。アクティブかどうかで見た目を変えるとかできそうですね。