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

WPF 4.6

Grabacr07
August 08, 2015

WPF 4.6

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

Grabacr07

August 08, 2015
Tweet

More Decks by Grabacr07

Other Decks in Technology

Transcript

  1. WPF 4.6
    and Visual Studio 2015
    2015/08/08 Japan CSharp User Group
    Visual Studio 2015 リリース記念勉強会
    Manato KAMEYA (@Grabacr07)

    View Slide

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

    View Slide

  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/

    View Slide

  4. Transparent Child Window support
    WPF 4.6 (1)

    View Slide

  5. Transparent Child Window support
    WPF で Child Window
    Win32 相互運用シナリオ
    MDI 的なもの (MDI は WPF 未サポート)
    WS_CHILDWINDOW
    透過できなかった
    親ウィンドウとは別のウィンドウ ハンドル
    (Win32 相互運用とかで必要になる)

    View Slide

  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);
    これ

    View Slide

  7. Transparent Child Window support
    Application Manifest に追記






    透過する Child Window
    WebBrowser 等より上に描画でき、
    かつ透過できる貴重な存在

    View Slide

  8. High DPI Improvements
    WPF 4.6 (2)

    View Slide

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

    View Slide

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

    View Slide

  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 …?

    View Slide

  12. High DPI Improvements
    .NET Framework 4.6 アプリの場合
    境界線の丸めをうまく処理してくれるようになった
    UseLayoutRounding="true"
    正しく 2 px で描画される
    コード修正必要なし

    View Slide

  13. High DPI Improvements
    .NET Framework 4.5.2 (またはそれ以下) の場合
    app.config に AppContextSwitchOverrides を追記
    .NET Framework 4.6 と同様の丸め動作へ




    value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />


    これ (長い)

    View Slide

  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

    View Slide

  15. の WPF で使える新機能とまとめ
    Visual Studio 2015

    View Slide

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

    View Slide

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

    View Slide

  18. New features
    Live VisualTree + Live Property Explorer
    ①実行中の
    アプリ上で
    要素を選択
    ② Visual Tree
    上での要素を
    自動的に特定
    ③選択要素の
    プロパティ値
    実行中に変更

    View Slide

  19. Conclusion
    WPF in .NET Framework 4.6
    透明な子ウィンドウがサポートされるようになった!
    High-DPI 環境でレイアウトの丸めがいい感じになった!
    タッチ サポートの改善 (バグ修正っぽい)
    Visual Studio 2015 + WPF
    Live VisualTree + Live Property Explorer is 最強

    View Slide

  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 平井さんも…!

    View Slide