前置き
通常のウィンドウでリサイズグリップを有効にしたい場合、Window.ResizeMode
プロパティにCanResizeWithGrip
をセットすると有効になります。
※例 Visual Studio 2013のリサイズグリップ
しかし、(カッコイイ枠なしウィンドウを作るために)WhindowChrome
を使っていた場合、ただリサイズグリップが表示されるだけで、ドラッグしてもウィンドウサイズを変更できません。
解決方法
この問題を解消するためには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"
が設定されていれば右下のグリップハンドルとして振舞います。