在這種情況下使用Grid
可能非常有用,因爲您的控件具有相當明確的位置和相對大小。
要使用它,請爲您的網格創建行和列,並添加控件以指定它應該填充的單元格。
例如,
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="4*" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<ListBox x:Name="itemList" Grid.Row="0" Grid.Column="0" Background="Green" />
<UserControl x:Name="infoPanel" Grid.Row="1" Grid.RowSpan="2" Grid.Column="0" Background="Yellow" />
<UserControl x:Name="mediaElement" Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" Background="Blue" />
<StackPanel Grid.Row="2" Grid.Column="1" Background="Red"
Orientation="Horizontal" HorizontalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="5" />
<Setter Property="Background" Value="Aqua" />
</Style>
</StackPanel.Resources>
<Button>button1</Button>
<Button>button2</Button>
<Button>button3</Button>
</StackPanel>
</Grid>
給你一個佈局,看起來像這樣:
當然也有很多方法可以實現這一佈局,所以要學會什麼是提供給您,以及如何你可以使用它們來實現你想要的。
要添加另一行來放置您的項目,您需要做幾件事。
- 將新的
RowDefinition
添加到RowDefinitions
,指定高度(如有必要)。
- 將所有位於新行下方的控件移到下一個(將
Grid.Row
加1)。
- 跨越多行且正在被此新行剪切的任何控件也應該增加1(通過將其加1到
Grid.RowSpan
)。
注意設計師,它可以真正幫助你在這裏。
所以在這個例子中,作出這些調整,你可以這樣做:
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="4*" />
<RowDefinition Height="25" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<ListBox x:Name="itemList" Grid.Row="0" Grid.Column="0" Background="Green" />
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" Background="Orange">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="5,0,5,0" />
<Setter Property="Background" Value="Turquoise" />
</Style>
</StackPanel.Resources>
<Button>button4</Button>
<Button>button5</Button>
</StackPanel>
<UserControl x:Name="infoPanel" Grid.Row="2" Grid.RowSpan="2" Grid.Column="0" Background="Yellow" />
<UserControl x:Name="mediaElement" Grid.Row="0" Grid.RowSpan="3" Grid.Column="1" Background="Blue" />
<StackPanel Grid.Row="3" Grid.Column="1" Background="Red"
Orientation="Horizontal" HorizontalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="5" />
<Setter Property="Background" Value="Aqua" />
</Style>
</StackPanel.Resources>
<Button>button1</Button>
<Button>button2</Button>
<Button>button3</Button>
</StackPanel>
</Grid>
這將產生以下結果:
我怎麼會適合另一在黃色和綠色面板之間的StackPanel?我已經嘗試將黃色面板移動到Grid.Row =「2」,但最終會失去太多高度。新的StackPanel只需要25px的高度,因爲它只包含兩個小按鈕。 – rafale
您必須在網格中添加另一行,並將該行下方的所有控件移到下一行。請注意,這使用相對大小。您可以通過'*'調整數字來調整大小。如果您沒有明確添加高度/寬度,則將其視爲1 *'。我將展開我的回答,以展示我的意思。 –