【发布时间】:2011-10-17 19:39:57
【问题描述】:
在很多情况下,我的面板或网格会自动调整大小,但如果它们包含 TextBox 和 TextWrapping="Wrap",TextBox 会在面板/网格真正向右扩展之前很久需要,如下图:
我要做的是让TextBox 在尝试向右扩展之前通过包装文本来填充其区域。该问题的一个简化示例是:
<Grid>
<Grid Background="Black" />
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox TextWrapping="Wrap" Height="120" MinWidth="200" />
</Grid>
</Grid>
我在 Stack Overflow here 上发现了一个类似的问题,但发布的最佳解决方案不允许 TextBox 扩展。该解决方案类似于:
<Grid>
<Grid Background="Black">
</Grid>
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border BorderThickness="0" x:Name="border" Margin="0.5" />
<TextBox TextWrapping="Wrap" Height="120" MinWidth="200" Width="{Binding ActualWidth, ElementName=border}" />
</Grid>
</Grid>
除了通过修改行为扩展 TextBox 之外还有什么想法吗?
【问题讨论】:
-
确保我理解了这个问题:您是说如果文本框可以支持 10 行文本,您希望它仅在输入第 11 行时才开始水平扩展?
-
@crazyarabian,正确,我只希望在输入第 n 行(超出可见范围)时进行水平扩展。就像我可以在文本框想要垂直滚动时触发一样,然后允许展开。
-
为什么要让文本框水平展开?从可用性的角度来看,这没有多大意义,而且似乎令人困惑,因为预期的行为要么是 a) 垂直扩展,要么是 b) 垂直滚动
-
在这个应用程序中水平扩展是有意义的,它的浮动窗口等等。几乎所有的控件(除了扩展器和画布)都有一个固定的垂直足迹,如果它们超出了,就滚动脚印。几乎所有输入控件都水平拉伸以填充可用区域。