在stackpannel中拉伸文本块和文本框
本文关键字:文本 stackpannel | 更新日期: 2023-09-27 17:49:24
我想自动将元素水平拉伸到网格宽度,所以当你拉伸窗口元素时,必须按比例拉伸。
<Grid Margin="0,0,0,40" Name="TaskGrid" Visibility="Hidden">
<StackPanel Name="AmountOfSP" Visibility="Collapsed" Orientation="Horizontal" HorizontalAlignment="Stretch">
<CheckBox Name="restrRadioButton" Checked="restrCheckBox_Checked" Unchecked="restrCheckBox_Unchecked"/>
<TextBlock TextWrapping="Wrap" Text="bla-bla" />
<TextBox Name="AmountOfO" HorizontalAlignment="Stretch" MinWidth="70" Height="20" Margin="10,0,0,0"/>
</StackPanel>
</Grid>
正如我在这里回答的那样,您不能使用StackPanel
在堆叠方向上拉伸,因为它将始终使用最小可能的堆叠元素大小(除非它们有固定的大小,然后它将利用它)。
使用DockPanel
或Grid
代替,并将内部元件适当地拉伸到最大尺寸
在上述答案的基础上再添加一个选项。您也可以使用UniformGrid
来实现您想要的。
<Grid Margin="0,0,0,40" Name="TaskGrid">
<UniformGrid Name="AmountOfSP" Columns="3" HorizontalAlignment="Stretch">
<CheckBox x:Name="restrRadioButton"/>
<TextBlock TextWrapping="Wrap" Text="bla-bla" />
<TextBox Name="AmountOfO" HorizontalAlignment="Stretch" MinWidth="70" Height="20" Margin="10,0,0,0"/>
</UniformGrid>
</Grid>
你可以用类似于下图的网格来替换你的stackpanel;
<Grid Name="AmountOfSP" Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<CheckBox Name="restrRadioButton" Grid.Column="0" Checked="restrCheckBox_Checked" Unchecked="restrCheckBox_Unchecked"/>
<TextBlock Grid.Column="1" TextWrapping="Wrap" Text="bla-bla" />
<TextBox Grid.Column="2" Name="AmountOfO" HorizontalAlignment="Stretch" MinWidth="70" Height="20" Margin="10,0,0,0"/>
<Grid>
你可以通过改变columnDefinition的宽度来改变不同控件的宽度,例如
<ColumnDefinition Width="Auto"/>
这三列将具有相同的宽度,并将展开以填充其占用的控件。
你不能以这种方式使用堆栈面板,因为它实际上只是通过"堆叠"(添加)它所包含的控件的宽度/高度来获得它的宽度/高度。
你可能会找到使用堆栈面板的变通方法,但使用不同的控件来完成你想要的工作要容易得多。