WPF で枠のないウィンドウを作る

実際に作ったものはこんな感じです

ソースコードはこちら。

実装するにあたって参考にしたサイト

こちらの記事を参考にさせていただきました。

この記事に沿っていったらできました。
これを追記するだけ。


    

枠なしには出来たけどウィンドウの影が気になる

ウィンドウの枠がなくなってかっこよくなったのに、影が主張し過ぎで気になります。
この影も消したい。
影を消す方法を調べていたら、先ほどと同じブログのこちらの記事にたどり着きました。

なるほど、よくわからん。
WPF初心者の私には無理だと判断したので、この記事の冒頭で紹介されていた簡易版で実装します。

影をいい感じにつける


~中略~
    
        
            
        
~中略~
    

Window に WindowStyle="None"AllowsTransparency="True"Background="Transparent" を指定することで、枠を消して透明にしています。
アプリが描画できる範囲が Window の 700 x 700 の内側のみで、その内側にさらに影とウィンドウを描画する、という認識です。
内側の Border に Margin を設けて、影をつけています。

WindowStyle="None"だと移動やリサイズができない

しかし、この方法だと移動がリサイズができなくなるらしいです。
こちらの記事などで、 WindowStyle="None" を使用した時の対策が書かれていました。

よくわからない、できればやりたくない。
と思っていたら、前述の WindowChrome のおかげか、特に何もせずに移動もリサイズもできました。

よくわからないけど動いたので完成

というわけで、枠なしのウィンドウを作りたい、という目的は達成しました。
ただ、ウィンドウの影はOS側に任せるべき処理であって、アプリ側でいじるべきではないと感じました。

Author
菅原 浩
Web プログラマー。好きな言葉は「安定的に不安定」。オーストラリアで英語を勉強した後に、現在デンマークで幸せについて考えている。
Next Post
WPF で方向キーを入力した方向へ四角形を動かす
Previous Post
4ヶ月無職で過ごした感想
Recent Posts
Electron と Scala.js と scalajs-react と ScalaCSS を使ってアプリを作った時のログ
Scala で Flyway と Slick を使って codegen した時のログ
自分とは連続した情報であると定義する
本「リモートチームでうまくいく」の感想
映画「Whiplash」の感想