Visual Studio 2015 リリース記念勉強会で発表した資料です。 .NET Framework 4.6 で WPF に加えられた細かい修正点を紹介。ついでに、WPF 開発で使える Visual Studio 2015 の新機能を軽く紹介。
WPF 4.6and Visual Studio 20152015/08/08 Japan CSharp User GroupVisual Studio 2015 リリース記念勉強会Manato KAMEYA (@Grabacr07)
View Slide
Self Introduction亀谷学人 (かめやまなと) / 1987年生まれ / 仙台出身 / 東京在住Work2010/04 - 2014/07 … 某メーカー系 SIerC# + WPF (Windows Client Application)2014/09 - 現在 … 株式会社グラニC# + Unity (Game app), C# + WPF (Tools)
Self Introduction亀谷学人 (かめやまなと) / 1987年生まれ / 仙台出身 / 東京在住PrivateRoom metro Tokyo (めとべや東京勉強会) staff提督業も忙しい! (KanColleViewer) 開発Microsoft MVP for Visual C# (2014/04 - 2016/03)Twitter: @Grabacr07Facebook: manato.kameyaBlog: http://grabacr.net/
Transparent Child Window supportWPF 4.6 (1)
Transparent Child Window supportWPF で Child WindowWin32 相互運用シナリオMDI 的なもの (MDI は WPF 未サポート)WS_CHILDWINDOW透過できなかった親ウィンドウとは別のウィンドウ ハンドル(Win32 相互運用とかで必要になる)
Transparent Child Window supportUsesPerPixelTransparency propertyHwndSourceParameters 構造体に追加true を指定すると作成したウィンドウが透過var windowParams = new HwndSourceParameters("ChildWindow"){ParentWindow = parentWindowHandle,WindowStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN WS_VISIBLE,PositionX = 200,PositionY = 150,UsesPerPixelTransparency = true,};var source = new HwndSource(windowParams);これ
Transparent Child Window supportApplication Manifest に追記透過する Child WindowWebBrowser 等より上に描画でき、かつ透過できる貴重な存在
High DPI ImprovementsWPF 4.6 (2)
High DPI Improvements例えば DPI 150 % 環境下においてValue="1" />
High DPI Improvements例えば DPI 150 % 環境下において2 px2 px 2 px1 px
High DPI ImprovementsUseLayoutRounding property> MSDN から引用https://msdn.microsoft.com/ja-jp/library/system.windows.frameworkelement.uselayoutrounding(v=vs.110).aspxレイアウト計算を丸めて、半透明エッジを排除する機能DPI 150 % の場合 となるが…Round (1.0 px * 150 %) = 2.0 px0.25px 0.25px1.00 px 1.00 px0.25px 0.25pxRound (1.25) = 1 …?
High DPI Improvements.NET Framework 4.6 アプリの場合境界線の丸めをうまく処理してくれるようになったUseLayoutRounding="true"正しく 2 px で描画されるコード修正必要なし
High DPI Improvements.NET Framework 4.5.2 (またはそれ以下) の場合app.config に AppContextSwitchOverrides を追記.NET Framework 4.6 と同様の丸め動作へvalue="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />これ (長い)
DPI Scaling150 % 環境における DPI スケーリングそもそも、Border が 2 px になるのは如何なものかWindows の VisualStyle は DPI 150 % でも Border は 1 px1 px ではなく 0.99 と指定するとなり、150 % 環境下でも Border = 1 px を再現可能http://mntone.hateblo.jp/entry/2015/06/29/090728Round (0.99 px * 150 %) = Round (1.485) = 1 px
の WPF で使える新機能とまとめVisual Studio 2015
New featuresCodeLensXAML デザイナーでも CodeLens が出るようにファイル単位なので C# コードほどの利便性はないけど
New featuresPeek DefinitionXAML 上の要素を右クリック > 「定義をここに表示」型、バインディング ソース、リソース、だいたい何でもXAML エディター内に要素の定義コードが出る
New featuresLive VisualTree + Live Property Explorer①実行中のアプリ上で要素を選択② Visual Tree上での要素を自動的に特定③選択要素のプロパティ値実行中に変更
ConclusionWPF in .NET Framework 4.6透明な子ウィンドウがサポートされるようになった!High-DPI 環境でレイアウトの丸めがいい感じになった!タッチ サポートの改善 (バグ修正っぽい)Visual Studio 2015 + WPFLive VisualTree + Live Property Explorer is 最強
Room metro Tokyoめとべや東京勉強会 #92015/08/22 13:00 ~ 18:00 ・ GST 31F Room C+D (ここ!)https://roommetro.doorkeeper.jp/events/29220Windows Phone スペシャルセッションはすべて Windows Phone 関連MADOSMA を開発した MCJ 平井さんも…!