在堆栈面板中拉伸文本块和文本框
Posted
技术标签:
【中文标题】在堆栈面板中拉伸文本块和文本框【英文标题】:Stretching textblock and texbox in stackpannel 【发布时间】:2016-06-24 12:07:25 【问题描述】:我想自动将元素水平拉伸到网格宽度,所以当你拉伸窗口元素时必须按比例拉伸。
<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>
【问题讨论】:
UniformGrid 工作得很好,还有一些问题,我通过使折叠字段可见来使用堆叠字段,我如何将窗口的宽度绑定到可见字段。 【参考方案1】:正如我已回答 here 一样,您不能使用 StackPanel
在堆叠方向上拉伸,因为它将始终使用尽可能小的堆叠元素尺寸(除非它们具有固定尺寸,那么它将利用它)。
改用DockPanel
或Grid
并适当地排序内部组件以拉伸到完整尺寸。
【讨论】:
【参考方案2】:在上述答案的基础上再添加一个选项。你也可以利用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>
【讨论】:
【参考方案3】:您可以将堆栈面板替换为类似于下图所示的网格;
<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"/>
就目前而言,您的所有三个列将具有相同的宽度,并且会扩展以填充它所占据的控件。
您不能以这种方式用作堆栈面板,因为它实际上只是通过“堆叠”(添加)它包含的控件的宽度/高度来获得它的宽度/高度。
您可以使用堆栈面板找到解决方法,但使用其他控件来完成您所追求的工作要容易得多。
【讨论】:
以上是关于在堆栈面板中拉伸文本块和文本框的主要内容,如果未能解决你的问题,请参考以下文章
根据在另一个文本框中键入的文本,使用 AJAX 更新面板在 ASP.NET 中自动填充文本框