6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WindowChromeを使用したウィンドウでリサイズグリップを有効にする方法

Posted at

前置き

通常のウィンドウでリサイズグリップを有効にしたい場合、Window.ResizeModeプロパティにCanResizeWithGripをセットすると有効になります。

WS000005.JPG
※例 Visual Studio 2013のリサイズグリップ

しかし、(カッコイイ枠なしウィンドウを作るために)WhindowChromeを使っていた場合、ただリサイズグリップが表示されるだけで、ドラッグしてもウィンドウサイズを変更できません。

WS000008.JPG
※リサイズできない

解決方法

この問題を解消するためにはWindowChrome.ResizeGripDirection添付プロパティを使います。
素晴らしいことに、このプロパティを添付されたコントロールは リサイズグリップになってしまうのです!
(おまけに最大化状態では無効になるという親切設計)

通常のリサイズグリップを再現するには、右下に配置したコントロールにWindowChrome.ResizeGripDirection="BottomRight"を設定すると良いです。

サンプルコードはこんな感じです。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None"
        Title="MainWindow" Height="350" Width="525">
    
    <WindowChrome.WindowChrome>
        <WindowChrome ResizeBorderThickness="1"
                      CaptionHeight="40"/>
    </WindowChrome.WindowChrome>
    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Grid Grid.Row="1"
              Background="LightGray">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            
            <TextBlock Grid.Column="1"
                       WindowChrome.ResizeGripDirection="BottomRight"
                       Background="BlueViolet"
                       Foreground="White"
                       Padding="5"
                       VerticalAlignment="Center"
                       Text="右下"/>
        </Grid>
    </Grid>
</Window>

これだけで"右下"と表示されたTextBlockがリサイズグリップとして振舞います。コードビハインドも無くとっても簡単です。
仮にこのTextBlockど真ん中に配置されていてもWindowChrome.ResizeGripDirection="BottomRight"が設定されていれば右下のグリップハンドルとして振舞います。

これを実行するとこうなります。
Resize.gif

参考

WindowChrome.ResizeGripDirection アタッチされるプロパティ

ResizeGripDirection 列挙体

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?