我有一个
TextBox
,我希望它是多行的并自动调整父级的大小:
<TextBox Grid.Row="0" Grid.Column="0"
AcceptsReturn="True"
HorizontalAlignment="Stretch"
IsEnabled="{Binding CanModify}"
Margin="0"
TextWrapping="Wrap"
Text="{Binding Comment, UpdateSourceTrigger=PropertyChanged}"
VerticalScrollBarVisibility="Auto"
VerticalAlignment="Stretch"
/>
让
TextBlock
自动切换到新行的大多数建议都是在其属性中添加 TextWrapping="Wrap"
,以防止其拉伸,通常是 AcceptsReturn="True"
、VerticalScrollBarVisibility="Auto"
或手动设置 width
。正如你所看到的,我唯一还没有尝试过的是宽度,但在我的例子中 TextBox
应该适合容器,其宽度未知(也取决于它的父级)。按照列表中的方式设置属性并没有帮助:插入符号永远不会移动到新行并拉伸 TextBox
和整个窗口。
我该怎么做才能防止
TextBox
拉伸并自动将文本移动到新行?
编辑:容器是一个
TabControl
。包含选项卡:
<TabItem Header="{some binding}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="TabHeight" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="TabWidth" />
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0"
AcceptsReturn="True"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
IsEnabled="{Binding CanModify}"
Margin="0"
Style="{some style}"
TextWrapping="Wrap"
Text="{Binding Comment, UpdateSourceTrigger=PropertyChanged}"
VerticalScrollBarVisibility="Auto"
/>
</Grid>
</TabItem>
这个
TabControl
在于一个简单的Grid
,没有任何特定风格的约束。唉,我无法分享应用于 TabControl
的完整样式代码,但我非常感谢任何尝试的想法。
您看到的SharedSizeGroups
旨在将整个TabControl
拉伸到最宽的选项卡,防止其在选项卡开关上调整大小并仅与另一个选项卡共享(此TabControl
中有两个选项卡)。
去掉
UpdateSourceTrigger=PropertyChanged
,多行就可以了。我不知道为什么,但这对我来说就是问题。