如何使TextBox填充所有可用空间而不稍后调整其内容?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使TextBox填充所有可用空间而不稍后调整其内容?相关的知识,希望对你有一定的参考价值。
我有以下Grid
和TextBox
:
<UserControl ...>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30px"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1px"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="1" Grid.RowSpan="3" AcceptsReturn="True"
TextWrapping="Wrap" HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Visible" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
<!-- content in other cells of the Grid's first column -->
</Grid>
</UserControl>
我希望TextBox
填充控件上可用的所有空间(宽度和高度),并且用户应该输入更多文本而不是适合它我希望它的垂直滚动条变为活动状态,而不调整TextBox
的大小。相反的是,TextBox
的大小会变化以适应内容,整个网格随之增长。
我如何实现我的需求?
上面的截图是内容适合TextBox
的情况。下面的屏幕截图是当没有足够空间容纳所有内容时的情况 - 然后调整TextBox
以适应它,这也调整了它所放置的网格的大小,使其看起来破碎。
编辑2:演示此行为的项目是here。
TextBox
没有填补Grid
。您可以通过为Background
指定Grid
来自行确认:
<UserControl>
<Grid Background="Yellow">
...
这是因为Grid
的高度是30 px +,无论TextBox
的高度是+ 1 px。对于第2行或第3行的内容来填充Grid
,您需要将Height
中的至少一个的RowDefinitions
更改为*
:
<UserControl>
<Grid Background="Yellow">
<Grid.RowDefinitions>
<RowDefinition Height="30px"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="1px"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="1" Grid.RowSpan="3" AcceptsReturn="True"
TextWrapping="Wrap" HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Visible" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
</Grid>
</UserControl>
我设法通过在Border
的Grid
的相同单元格中添加一个不可见的TextBox
,然后将TextBox
'Width
和Height
分别设置为ActualWidth
的ActualHeight
和Border
来解决这个问题:
<Border x:Name="b" Grid.Column="1" Grid.RowSpan="3"
HorizontalAlignment="Stretch"/>
<TextBox AcceptsReturn="True" TextWrapping="Wrap" Grid.Column="1"
Grid.RowSpan="3" Width="{Binding ActualWidth, ElementName=b}"
Height="{Binding ActualHeight, ElementName=b}"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Visible" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
这导致TextBox
保持固定的Height
,无论其内容如何,但是它的Width
还有另一个问题:当界面扩展时它会增长,但之后没有收缩,因为底层的ScrollViewer
。诀窍是将ScrollViewer
的HorizontalScrollBarVisibility
设置为Disabled
,而不是像之前那样将Hidden
设置为here。
我将示例项目的更改推送到GitHub,因此解决方案现在可用qazxswpoi。
以上是关于如何使TextBox填充所有可用空间而不稍后调整其内容?的主要内容,如果未能解决你的问题,请参考以下文章
使 Scrollviewer 填充 DockPanel 中的可用空间