均匀地 space StackPanel children 填充剩余的 space
Evenly space StackPanel children to fill remaining space
我在 WPF 中有一个 StackPanel
,其中包含 Label
和 TextBox
,StackPanel
的方向是 Vertical
。我希望 children spaced 均匀分布在 StackPanel
的剩余高度之间,或者每个 UI 元素之间可能有一些动态填充或其他东西,我是不知道该怎么做。
这是目前的样子:
<StackPanel Margin="10 0" Grid.Row="1" Grid.RowSpan="3" Grid.Column="1">
<Label>Template Name:</Label>
<TextBox x:Name="templateNameTextBox"></TextBox>
<Label>Object Name:</Label>
<TextBox x:Name="objectNameTextBox"></TextBox>
<Label>Custom Name:</Label>
<TextBox x:Name="customNameTextBox"></TextBox>
</StackPanel>
最后一个 TextBox
下面只有一大堆空的 space。我知道我可能不得不在某个时候将每个 Label
和相应的 TextBox
放在它们自己的面板中,以便将它们分组,但在我弄清楚间距之前我没有为此烦恼.如果可能的话,我只是不想为每个人都设置静态值才能正确地 spaced。
已解决:
谢谢,当你提到网格时,我并没有考虑他们在他们自己的行中,这是有道理的,而且现在你提到它很清楚。统一的网格应该可以工作,因为它们都需要均匀 spaced。我还没有使用过 uniformgrid,也不知道它们的用途,所以谢谢你带我找到它们,我想这就是我会选择的。
为了均匀分布 space,您可以使用默认 star-sizing 的 Grid
(每行 *
)。
Columns and rows that are defined within a Grid can take advantage of Star sizing to distribute remaining space proportionally. When Star is selected as the height or width of a row or column, that column or row receives a weighted proportion of the remaining available space.
它可能看起来像这样(我添加了 StackPanel
s 来分组标签和文本框)。
<Grid Margin="10 0" Grid.Row="1" Grid.RowSpan="3" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
VerticalAlignment="Center">
<Label>Template Name:</Label>
<TextBox x:Name="templateNameTextBox"></TextBox>
</StackPanel>
<StackPanel Grid.Row="1"
VerticalAlignment="Center">
<Label>Object Name:</Label>
<TextBox x:Name="objectNameTextBox"></TextBox>
</StackPanel>
<StackPanel Grid.Row="2"
VerticalAlignment="Center">
<Label>Custom Name:</Label>
<TextBox x:Name="customNameTextBox"></TextBox>
</StackPanel>
</Grid>
由于所有元素的分布应该相等,您也可以使用 UniformGrid
.
<UniformGrid Margin="10 0" Grid.Row="1" Grid.RowSpan="3" Grid.Column="1">
<StackPanel VerticalAlignment="Center">
<Label>Template Name:</Label>
<TextBox x:Name="templateNameTextBox"></TextBox>
</StackPanel>
<StackPanel VerticalAlignment="Center">
<Label>Object Name:</Label>
<TextBox x:Name="objectNameTextBox"></TextBox>
</StackPanel>
<StackPanel VerticalAlignment="Center">
<Label>Custom Name:</Label>
<TextBox x:Name="customNameTextBox"></TextBox>
</StackPanel>
</UniformGrid>-->
我在 WPF 中有一个 StackPanel
,其中包含 Label
和 TextBox
,StackPanel
的方向是 Vertical
。我希望 children spaced 均匀分布在 StackPanel
的剩余高度之间,或者每个 UI 元素之间可能有一些动态填充或其他东西,我是不知道该怎么做。
这是目前的样子:
<StackPanel Margin="10 0" Grid.Row="1" Grid.RowSpan="3" Grid.Column="1">
<Label>Template Name:</Label>
<TextBox x:Name="templateNameTextBox"></TextBox>
<Label>Object Name:</Label>
<TextBox x:Name="objectNameTextBox"></TextBox>
<Label>Custom Name:</Label>
<TextBox x:Name="customNameTextBox"></TextBox>
</StackPanel>
最后一个 TextBox
下面只有一大堆空的 space。我知道我可能不得不在某个时候将每个 Label
和相应的 TextBox
放在它们自己的面板中,以便将它们分组,但在我弄清楚间距之前我没有为此烦恼.如果可能的话,我只是不想为每个人都设置静态值才能正确地 spaced。
已解决:
谢谢,当你提到网格时,我并没有考虑他们在他们自己的行中,这是有道理的,而且现在你提到它很清楚。统一的网格应该可以工作,因为它们都需要均匀 spaced。我还没有使用过 uniformgrid,也不知道它们的用途,所以谢谢你带我找到它们,我想这就是我会选择的。
为了均匀分布 space,您可以使用默认 star-sizing 的 Grid
(每行 *
)。
Columns and rows that are defined within a Grid can take advantage of Star sizing to distribute remaining space proportionally. When Star is selected as the height or width of a row or column, that column or row receives a weighted proportion of the remaining available space.
它可能看起来像这样(我添加了 StackPanel
s 来分组标签和文本框)。
<Grid Margin="10 0" Grid.Row="1" Grid.RowSpan="3" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
VerticalAlignment="Center">
<Label>Template Name:</Label>
<TextBox x:Name="templateNameTextBox"></TextBox>
</StackPanel>
<StackPanel Grid.Row="1"
VerticalAlignment="Center">
<Label>Object Name:</Label>
<TextBox x:Name="objectNameTextBox"></TextBox>
</StackPanel>
<StackPanel Grid.Row="2"
VerticalAlignment="Center">
<Label>Custom Name:</Label>
<TextBox x:Name="customNameTextBox"></TextBox>
</StackPanel>
</Grid>
由于所有元素的分布应该相等,您也可以使用 UniformGrid
.
<UniformGrid Margin="10 0" Grid.Row="1" Grid.RowSpan="3" Grid.Column="1">
<StackPanel VerticalAlignment="Center">
<Label>Template Name:</Label>
<TextBox x:Name="templateNameTextBox"></TextBox>
</StackPanel>
<StackPanel VerticalAlignment="Center">
<Label>Object Name:</Label>
<TextBox x:Name="objectNameTextBox"></TextBox>
</StackPanel>
<StackPanel VerticalAlignment="Center">
<Label>Custom Name:</Label>
<TextBox x:Name="customNameTextBox"></TextBox>
</StackPanel>
</UniformGrid>-->