WPF_レイアウトコントロール
StackPanelコントロール
StackPanelコントロールは、子要素を縦方向または横方向に一列に並べるコントロールです。
StackPanelを入れ子にすることで、レイアウトを細かく指定できます。
なお、子要素が外にはみ出したときには自動制御的な表示はされません。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="240" Width="360">
<StackPanel Name="stackPanel1" Orientation="Vertical">
<Button Name="button1" MinHeight="30">Button1</Button>
<Button Name="button2" MinHeight="30" FontSize="16">Button2</Button>
<Button Name="button3" MinHeight="30" FontSize="24">Button3</Button>
<StackPanel Name="stackPanel2" Orientation="Horizontal">
<Button Name="button4" MinHeight="90">Button1</Button>
<Button Name="button5" MinHeight="90" FontSize="16">Button2</Button>
<Button Name="button6" MinHeight="90" FontSize="24">Button3</Button>
</StackPanel>
</StackPanel>
</Window>
WrapPanelコントロール
WrapPanelコントロールは、子要素が外にはみ出したときに折り返して表示するコントロールです。
TextBox コントロールで長いテキストを折り返すことを "wrap" といいますが、WrapPanelは子要素を wrap 可能にします。
基本的にはStackPanelコントロールと同じ挙動です。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="500">
<WrapPanel>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
<Button Content="Button" Width="80" Margin="5"/>
</WrapPanel>
</Window>
DockPanelコントロール
DockPanelコントロールは、コントロールを上下左右と残りの部分にわけて配置するコントロールです。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<!-- メニューバー -->
<Menu Name="menu1" DockPanel.Dock="Top">
<MenuItem Header="メニュー1(_F)" Width="Auto"></MenuItem>
<MenuItem Header="メニュー2(_E)" Width="Auto"></MenuItem>
</Menu>
<!-- ツールバー -->
<ToolBarTray DockPanel.Dock="Top">
<ToolBar Name="toolbar1" Height="30">
<Button Command="Open" Width="22" Height="22" ToolTip="ファイルを開く">
<Button.Content>
<Image Source="OpenFile.png" Width="16" Height="16" Stretch="Uniform"/>
</Button.Content>
</Button>
</ToolBar>
</ToolBarTray>
<!-- ステータスバー -->
<StatusBar DockPanel.Dock="Bottom" Height="30">
<StatusBarItem>
<TextBlock>ステータスバー1</TextBlock>
</StatusBarItem>
<StatusBarItem>
<TextBlock>ステータスバー2</TextBlock>
</StatusBarItem>
</StatusBar>
<!-- 残りの領域が描写の中央部分に位置します。 -->
<!-- 左ペイン -->
<Button DockPanel.Dock="Left" Content="Tree" MinWidth="150" />
<!-- メインペイン -->
<Button Content="Content" />
</DockPanel>
</Window>
Gridコントロール
Gridコントロールは、表形式(列位置と行位置の指定)レイアウトを作成するコントロールです。
行と列を定義して、子要素を任意の行と列に配置できます。
GridSplitter という Grid コントロール用スプリッタコントロールも用意されています。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="240" Width="360">
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<!-- 子要素の配置 -->
<StackPanel Grid.Row="1" Grid.Column="1">
<Button Content="Button"/>
</StackPanel>
<GridSplitter Grid.Column ="0" Grid.RowSpan="3" Width="2" HorizontalAlignment="Right" VerticalAlignment="Stretch" Background="Red"/>
<GridSplitter Grid.Column ="1" Grid.RowSpan="3" Width="2" HorizontalAlignment="Right" VerticalAlignment="Stretch" Background="Red"/>
</Grid>
</Window>
ScrollViewer コントロール
ScrollViewer コントロールは、子要素がScrollViewerより大きな場合にスクロールバーを出して要素を閲覧できるようにするコントロールです。
要素がレイアウトをはみ出ないようにスクロールバーを表示するためのコントロールです。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="240" Width="500">
<DockPanel>
<ScrollViewer x:Name="scrollViewer">
<StackPanel>
<Button Content="Button1" />
<Button Content="Button2" />
<Button Content="Button3" />
<Button Content="Button4" />
<Button Content="Button5" />
<Button Content="Button6" />
<Button Content="Button7" />
<Button Content="Button8" />
<Button Content="Button9" />
<Button Content="Button10" />
<Button Content="Button11" />
<Button Content="Button12" />
<Button Content="Button13" />
<Button Content="Button14" />
<Button Content="Button15" />
</StackPanel>
</ScrollViewer>
</DockPanel>
</Window>
Canvasコントロール
Canvasは、コントロール内の子要素を絶対的な座標値で位置を決定するパネルコントロールです。
これは図形コントロールをレイアウトするためのものであり、子要素の UI コントロールを設定する利用法は推奨されていません。
絶対座標指定
Canvasコントロールは、子要素をCanvasの中に絶対座標指定で配置できるコントロールです。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="240" Width="360">
<Canvas>
<Button Canvas.Top="10" Canvas.Left="10" Content="左上ボタン" />
<Button Canvas.Top="20" Canvas.Right="20" Content="右上ボタン" />
<Button Canvas.Bottom="30" Canvas.Left="30" Content="左下ボタン" />
<Button Canvas.Bottom="40" Canvas.Right="40" Content="右下ボタン" />
</Canvas>
</Window>
ZIndex プロパティ
CanvasコントロールのZIndex プロパティはいわゆる Z オーダーを指定するものです。
値の小さいもの(負数可能)要素ほど上に表示されます。
なお、ZIndex プロパティの設定がない場合は、要素を配置した順番で上に表示されます。
<Window x:Class="WpfDevelop.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"
mc:Ignorable="d"
Title="MainWindow" Height="240" Width="360">
<Canvas>
<Rectangle Fill="Blue" Width="100" Height="100" Canvas.Left="50" Canvas.Top="40" Canvas.ZIndex="1"/>
<Ellipse Fill="Green" Width="100" Height="100" Canvas.Left="100" Canvas.Top="60"/>
<Polygon Fill="Red" Points="50,50 150,150 50,150" Canvas.Left="100" Canvas.Top="40"/>
</Canvas>
</Window>