【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる
前の記事「どこでも掴んで動かせるウィンドウを作る」のソースコードには、 15063 (Windows 10 Creaters Update, Version 1703) でもウィンドウに Acrylic Effect を掛けるために、 とりあえず暫定的なコードを書いていました。

※ クラウディア画像: © 2011 Microsoft Corporation All Rights Reserved.
今回、改めてわりと真面目に実装しなおしてみました。
- Acrylic Effect 自体に色を付ける (前回は、手前に半透明の色を置いて誤魔化してましたw)
- 設定で透明効果を OFF にしたとき (タブレットモードのときも)、ソリッドカラーにする
- ウィンドウがフォーカスを失ったときも、ソリッドカラーにする
ひとつめは、面倒なんでやりたくないよ~、っと思ってた案件なんです。 が、サックリ使えるコードを JuniperPhoton 氏が公開してくださってるのを見つけたので、それを利用。 次のようなコードを書くだけですみました。超らくちん♪ (要 NuGet パッケージ 「Win2D.uwp」)
draggableGrid.Background
= new MyerSplash.Common.Brush.AcrylicHostBrush()
{
TintColor = accentColor,
TintColorFactor = 0.4,
BackdropFactor = 0.6,
BlurAmount = 20,
};
二つめは、UISettings クラスの AdvancedEffectsEnabled プロパティで判定できます。 このプロパティが変化したときには UISettings クラスの AdvancedEffectsEnabledChanged イベントが叩かれるので、そのハンドラーで Acrylic Effect とベタな背景ブラシを切り替えてやれば OK。
ただし、AdvancedEffectsEnabledChanged イベントは別スレッドで叩かれるので要注意。 次のように Dispatcher.RunAsync してやります (内部関数にしているのは、ついでに ColorValuesChanged イベントにも対応したため)。
// 別スレッドで叩かれる!
_uiSettings.AdvancedEffectsEnabledChanged
+= (setting, o) => runAsync_SetBackgroundBrush();
async void runAsync_SetBackgroundBrush()
{
await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
// ここで適切な背景ブラシをセット
});
}
三つめは、 Window.Current.Activated イベントで e.WindowActivationState を見て切り替えてやるだけですね。
以上のコード全体 ⇒ https://github.com/biac/blogcode/tree/master/DraggableWindow
| 固定リンク
« 【#UWP】 どこでも掴んで動かせるウィンドウを作る | トップページ | 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る »
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「* プログラミング ( Metro スタイル )」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
- 【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる(2017.08.05)
この記事へのコメントは終了しました。


掲示板
blog
コメント