WPFのコントロールを任意の大きさにするには、WidthやHeightやMinWidth,MinHeight,MaxWith,MaxHeightを使うのが恐らく一般的だと思う。
これとは別に、本当にでっかくする方法もあったりする。今日は、そこらへんを試してみようと思う。
Viewbox
まずは、Viewboxについて!Viewboxとは、コンテンツの中身をViewboxの大きさに合わせて引き伸ばしてくれる動きをしてくれる。ということで、早速実験。
まずは、Viewboxの中にButtonを置いてみた。
<Window x:Class="WpfViewbox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Viewbox>
<Button Content="こんにちは" />
</Viewbox>
</Grid>
</Window>
これで実行すると、ボタンの縦横比を保った状態でボタンが画面いっぱいに広がる。
ここら辺の広がり方の方法の子弟はViewboxのStretchプロパティで指定できる。StretchプロパティはNone, Fill, Uniform, UniformToFillの4種類の値を指定できる。
値 |
説明 |
None |
何もしない |
Fill |
領域いっぱいに広げる |
Uniform |
縦横比を維持したまま、領域に収まる大きさいっぱいまで広げる。 |
UniformToFill |
縦横比を維持したまま、領域を完全に覆い尽くすように広げる。 |
ということで、動きを見るためにStretchプロパティに4種類の値を入れて動作を確認してみた。XAMLは以下のような感じ。
<Window x:Class="WpfViewbox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Viewbox Grid.Row="0" Stretch="None">
<Button Content="None" />
</Viewbox>
<Viewbox Grid.Row="1" Stretch="Fill">
<Button Content="Fill" />
</Viewbox>
<Viewbox Grid.Row="2" Stretch="Uniform">
<Button Content="Uniform" />
</Viewbox>
<Viewbox Grid.Row="3" Stretch="UniformToFill">
<Button Content="UniformToFill" />
</Viewbox>
</Grid>
</Window>
実行結果は以下の通り。確かに、説明どおりに大きくなってる。