ViewMakerで生成するWPF/Silverlightコントロール(13)StackPanel編
今回は2つ目のパネルStackPanelです。
StackPanelコントロール
StackPanelは上または左から順番にコントロールを並べて配置します。シンプルですが綺麗に整列してくれます。StackPanelで利用できる項目は以下の通りで前回のCanvasとほぼ同じです。配置方向のためのOrientationが追加されているぐらいです。
-
- Orientation(アイテム(子コントロール)の配置方向)
- HeaderPosition(パネルに配置されたコントロールの既定のヘッダー位置)
- HeaderWidth(パネルに配置されたコントロールの既定のヘッダー幅)
- HeaderHeight(パネルに配置されたコントロールの既定のヘッダー高さ)
- HeaderHorizontalContentAlignment(パネルに配置されたコントロールの既定のヘッダーコンテンツの水平配置位置)
- HeaderFontSize(パネルに配置されたコントロールの既定のヘッダーフォントサイズ)
- HeaderForeground(パネルに配置されたコントロールの既定のヘッダー前景色)
- HeaderBackground(パネルに配置されたコントロールの既定のヘッダー背景色)
- HasHeader(パネルのヘッダーを表示するか)
- ItemWidth(パネルに配置されたコントロールの既定の幅)
- ItemHeight(パネルに配置されたコントロールの既定の高さ)
- ItemMargin(パネルに配置されたコントロールの既定のマージン)
- Margin(パネル自身のマージン)
- LoadCommand(ロード時に実行するコマンド)
- UnloadCommand(アンロード時に実行するコマンド)
WPFサンプルイメージとXAMLコード
<HeaderedContentControl Header="StackPanel" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <StackPanel Name="StackPanel" Orientation="Vertical" DataContext="{Binding Path=StackPanel,Mode=OneWay}" MinHeight="150" Margin="5"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Width="50" Background="Azure">Item1</Label> <TextBox Name="Item11" Text="{Binding Path=Item1, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" VerticalAlignment="Center" Grid.Column="1" /> </Grid> <Grid HorizontalAlignment="Left"> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Label Width="50" Background="Azure" HorizontalAlignment="Left">Item2</Label> <TextBox Name="Item21" Text="{Binding Path=Item2, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" Width="200" Height="50" VerticalAlignment="Center" Grid.Row="1" /> </Grid> <Grid HorizontalAlignment="Left"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Width="50" HorizontalContentAlignment="Right" Background="Azure">Item3</Label> <CheckBox Name="Item31" IsChecked="{Binding Path=Item3, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" Width="20" VerticalAlignment="Center" Grid.Column="1" /> </Grid> <Grid HorizontalAlignment="Left"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Width="50" Background="Azure">Item4</Label> <DatePicker Name="Item41" SelectedDate="{Binding Path=Item4, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" Width="100" VerticalAlignment="Center" Grid.Column="1" /> </Grid> <DataGrid Name="Item51" AutoGenerateColumns="false" ItemsSource="{Binding Path=Item5,Mode=OneWay}" Height="100" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Path=Id, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="Id3" Header="Id" /> <DataGridTextColumn Binding="{Binding Path=Name, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="Name3" Header="Name" /> <DataGridTextColumn Binding="{Binding Path=Date, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="Date3" Header="Date" /> <DataGridCheckBoxColumn Binding="{Binding Path=OnOff, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="OnOff3" Header="OnOff" /> </DataGrid.Columns> </DataGrid> </StackPanel> </HeaderedContentControl>
SilverlightサンプルイメージとXAMLコード
<toolkit:HeaderedContentControl Header="StackPanel" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <StackPanel Name="StackPanel" Orientation="Vertical" DataContext="{Binding Path=StackPanel,Mode=OneWay}" MinHeight="150" Margin="5"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <sdk:Label Target="{Binding ElementName=Item11}" Width="50" Background="Azure">Item1</sdk:Label> <TextBox Name="Item11" Text="{Binding Path=Item1, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" VerticalAlignment="Center" Grid.Column="1" /> </Grid> <Grid HorizontalAlignment="Left"> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <sdk:Label Target="{Binding ElementName=Item21}" Width="50" Background="Azure" HorizontalAlignment="Left">Item2</sdk:Label> <TextBox Name="Item21" Text="{Binding Path=Item2, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" Width="200" Height="50" VerticalAlignment="Center" Grid.Row="1" /> </Grid> <Grid HorizontalAlignment="Left"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <sdk:Label Target="{Binding ElementName=Item31}" Width="50" HorizontalContentAlignment="Right" Background="Azure">Item3</sdk:Label> <CheckBox Name="Item31" IsChecked="{Binding Path=Item3, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" Width="20" VerticalAlignment="Center" Grid.Column="1" /> </Grid> <Grid HorizontalAlignment="Left"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <sdk:Label Target="{Binding ElementName=Item41}" Width="50" Background="Azure">Item4</sdk:Label> <sdk:DatePicker Name="Item41" SelectedDate="{Binding Path=Item4, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" Width="100" VerticalAlignment="Center" Grid.Column="1" /> </Grid> <sdk:DataGrid Name="Item51" AutoGenerateColumns="false" ItemsSource="{Binding Path=Item5,Mode=OneWay}" Height="100" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <sdk:DataGrid.Columns> <sdk:DataGridTextColumn Binding="{Binding Path=Id, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="Id3" Header="Id" /> <sdk:DataGridTextColumn Binding="{Binding Path=Name, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="Name3" Header="Name" /> <sdk:DataGridTextColumn Binding="{Binding Path=Date, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="Date3" Header="Date" /> <sdk:DataGridCheckBoxColumn Binding="{Binding Path=OnOff, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" x:Name="OnOff3" Header="OnOff" /> </sdk:DataGrid.Columns> </sdk:DataGrid> </StackPanel> </toolkit:HeaderedContentControl>
ViewModelコード
[View(ViewControlType.StackPanel)] [ViewProperty(StackPanelViewControl.Properties.HeaderBackground, "Azure")] [ViewProperty(StackPanelViewControl.Properties.HeaderWidth, 50)] [ViewProperty(StackPanelViewControl.Properties.HorizontalAlignment, LayoutHorizontalAlignment.Stretch)] [ViewProperty(StackPanelViewControl.Properties.VerticalAlignment, LayoutVerticalAlignment.Stretch)] [ViewProperty(StackPanelViewControl.Properties.HasHeader, true)] [ViewProperty("MinHeight", 150)] public class StackPanelSample : ViewModel { public string Item1 { get; set; } [ViewProperty(TextBoxViewControl.Properties.HeaderPosition, LayoutHeaderPosition.Top)] [ViewProperty(TextBoxViewControl.Properties.Width, 200)] [ViewProperty(TextBoxViewControl.Properties.Height, 50)] public string Item2 { get; set; } [ViewProperty(TextBoxViewControl.Properties.HeaderPosition, LayoutHeaderPosition.Left)] [ViewProperty(TextBoxViewControl.Properties.HeaderHorizontalContentAlignment, LayoutHorizontalAlignment.Right)] [ViewProperty(TextBoxViewControl.Properties.Width, 20)] public bool Item3 { get; set; } [ViewProperty(TextBoxViewControl.Properties.Width, 100)] public DateTime Item4 { get; set; } [ViewProperty(TextBoxViewControl.Properties.Height, 100)] public List<DataItem> Item5 { get; set; } public StackPanelSample() { Item1 = "some Text"; Item2 = "some Text"; Item5 = DataItem.CreateData(30); } }