mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

Windowの枠を消す

Window枠の消し方

方法は以下の2通りある。

  • WindowChromeでデフォルトの枠を消す
  • WindowStyleプロパティをNoneにする

WindowChromeを実装する

WindowChromeクラスの詳細は,MicroSoft Docsに記述されています。
WindowChrome クラス (System.Windows.Shell) | Microsoft Docs

簡単に言うと,WindowChromeはWindowの標準的な機能を維持しながらウィンドウをカスタマイズすることができます。
実際のコードがこちら。

<Window x:Class="WindowDropShadow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WindowDropShadow"
        mc:Ignorable="d"
        Title="Window DropShadowEffect" Height="150" Width="300">

    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="8" ResizeBorderThickness="3"/>
    </WindowChrome.WindowChrome>

    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{StaticResource BackgroundBrush}">
        <TextBlock Text="Test App" Foreground="{StaticResource TextForegroundBrush}"/>
    </Grid>
</Window>

CaptionHeightプロパティでウィンドウ上部の領域の高さを指定し,ResizeBorderThicknessプロパティでウィンドウのサイズ変更用Borderの線の太さを設定しています。0だとサイズ変更ができなくなります。

f:id:mogmo811:20181129105807p:plain
WindowChromeをのみを実装

注意
  • SizeToContentをTrueにすると,描画前にサイズを決定してしまう(?)ので黒い領域が出現する。LoadedイベントでSizeToContentをTrueにする処理にすれば描画後にサイズ調整されていい感じ。
  • 最大化の具合が悪いので手動で調整が必要

詳しいことはこちらのサイト様を参考にしています。
iyemon018.hatenablog.com

WindowStyleプロパティをNoneに設定する

この方法では,サイズ変更やウィンドウの移動処理などの機能を全て自前実装しなければならないのでかなり苦労しそう。
一応コードと画像を載せておく。

<Window x:Class="WindowStyleNone.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WindowStyleNone"
        mc:Ignorable="d"
        Title="Window Style None" Height="150" Width="300"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="Transparent"
        WindowStartupLocation="CenterScreen">
    
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White">
        <TextBlock Text="WindowStyle=None TestApp"/>
    </Grid>
</Window>

f:id:mogmo811:20181129110519p:plain
WindowStyleをNoneにしたウィンドウ

ひとまずここまで。
mogmo