Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WPF 4.6

Da5ad051bd594c29c3ddd5ba80327779?s=47 Grabacr07
August 08, 2015

WPF 4.6

Visual Studio 2015 リリース記念勉強会で発表した資料です。
.NET Framework 4.6 で WPF に加えられた細かい修正点を紹介。ついでに、WPF 開発で使える Visual Studio 2015 の新機能を軽く紹介。

Da5ad051bd594c29c3ddd5ba80327779?s=128

Grabacr07

August 08, 2015
Tweet

Transcript

  1. WPF 4.6 and Visual Studio 2015 2015/08/08 Japan CSharp User

    Group Visual Studio 2015 リリース記念勉強会 Manato KAMEYA (@Grabacr07)
  2. Self Introduction 亀谷学人 (かめやまなと) / 1987年生まれ / 仙台出身 / 東京在住

    Work 2010/04 - 2014/07 … 某メーカー系 SIer C# + WPF (Windows Client Application) 2014/09 - 現在 … 株式会社グラニ C# + Unity (Game app), C# + WPF (Tools)
  3. Self Introduction 亀谷学人 (かめやまなと) / 1987年生まれ / 仙台出身 / 東京在住

    Private Room metro Tokyo (めとべや東京勉強会) staff 提督業も忙しい! (KanColleViewer) 開発 Microsoft MVP for Visual C# (2014/04 - 2016/03) Twitter: @Grabacr07 Facebook: manato.kameya Blog: http://grabacr.net/
  4. Transparent Child Window support WPF 4.6 (1)

  5. Transparent Child Window support WPF で Child Window Win32 相互運用シナリオ

    MDI 的なもの (MDI は WPF 未サポート) WS_CHILDWINDOW 透過できなかった 親ウィンドウとは別のウィンドウ ハンドル (Win32 相互運用とかで必要になる)
  6. Transparent Child Window support UsesPerPixelTransparency property HwndSourceParameters 構造体に追加 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); これ
  7. Transparent Child Window support Application Manifest に追記 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application>

    <!–– アプリケーションが Windows 8 で動作するように設計うんぬんかんぬん --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" /> </application> </compatibility> 透過する Child Window WebBrowser 等より上に描画でき、 かつ透過できる貴重な存在
  8. High DPI Improvements WPF 4.6 (2)

  9. High DPI Improvements 例えば DPI 150 % 環境下において <Setter Property="BorderThickness"

    Value="1" />
  10. High DPI Improvements 例えば DPI 150 % 環境下において 2 px

    2 px 2 px 1 px
  11. High DPI Improvements UseLayoutRounding 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 px 0.25px 0.25px 1.00 px 1.00 px 0.25px 0.25px Round (1.25) = 1 …?
  12. High DPI Improvements .NET Framework 4.6 アプリの場合 境界線の丸めをうまく処理してくれるようになった UseLayoutRounding="true" 正しく

    2 px で描画される コード修正必要なし
  13. High DPI Improvements .NET Framework 4.5.2 (またはそれ以下) の場合 app.config に

    AppContextSwitchOverrides を追記 .NET Framework 4.6 と同様の丸め動作へ <?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 中略 --> <runtime> <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" /> </runtime> </configuration> これ (長い)
  14. DPI Scaling 150 % 環境における DPI スケーリング そもそも、Border が 2

    px になるのは如何なものか Windows の VisualStyle は DPI 150 % でも Border は 1 px 1 px ではなく 0.99 と指定する となり、150 % 環境下でも Border = 1 px を再現可能 http://mntone.hateblo.jp/entry/2015/06/29/090728 Round (0.99 px * 150 %) = Round (1.485) = 1 px
  15. の WPF で使える新機能とまとめ Visual Studio 2015

  16. New features CodeLens XAML デザイナーでも CodeLens が出るように ファイル単位なので C# コードほどの利便性はないけど

  17. New features Peek Definition XAML 上の要素を右クリック > 「定義をここに表示」 型、バインディング ソース、リソース、だいたい何でも

    XAML エディター内に 要素の定義コードが出る
  18. New features Live VisualTree + Live Property Explorer ①実行中の アプリ上で

    要素を選択 ② Visual Tree 上での要素を 自動的に特定 ③選択要素の プロパティ値 実行中に変更
  19. Conclusion WPF in .NET Framework 4.6 透明な子ウィンドウがサポートされるようになった! High-DPI 環境でレイアウトの丸めがいい感じになった! タッチ

    サポートの改善 (バグ修正っぽい) Visual Studio 2015 + WPF Live VisualTree + Live Property Explorer is 最強
  20. Room metro Tokyo めとべや東京勉強会 #9 2015/08/22 13:00 ~ 18:00 ・

    GST 31F Room C+D (ここ!) https://roommetro.doorkeeper.jp/events/29220 Windows Phone スペシャル セッションはすべて Windows Phone 関連 MADOSMA を開発した MCJ 平井さんも…!