我在WPF中有一个StackPanel,其中包含Labels和TextBoxes,StackPanel的方向是Vertical。我希望在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下面只有一吨的空空间。我知道我可能会在某个时候把每个Label和相应的TextBox放在他们自己的面板中,这样他们就可以分组了,但是在我找出间距之前,我并没有为此烦恼过。如果可能的话,我只是不想为每一个都放置静态值来使它们正确地间隔。
已解决:
谢谢你,当你提到网格的时候,我没有想过他们是在他们自己的行列中,这是有意义的,现在你已经提到了这一点。统一的网格应该正常工作,因为它们都需要均匀的间隔。我还没有使用统一网格,也不知道这是为了什么,所以谢谢你带我找到他们,我想这就是我要选择的。
发布于 2022-02-08 17:00:33
为了均匀地分配空间,可以使用默认星号(每一行的Grid )。
在网格中定义的
列和行可以利用星号大小来按比例分配剩余空间()。当选择星星作为行或列的高度或宽度时,该列或行将收到剩余可用空间的加权比例。
它可以是这样的(我将StackPanels添加到组标签和文本框中)。
<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>-->https://stackoverflow.com/questions/71037089
复制相似问题