我有一个包含很多对象的WPF页面。在所有这些项目的底部,我有一个标签,需要在内容中进行文本换行。答案很简单,使用Textblock这应该很简单。然而,即使我使用这些项目,我仍然无法得到文本包装。所以我假设在我需要检查/修改的其他对象中必须有其他设置。在伪代码中,我的XAML看起来像
<Page>
<Stackpanel vertical>
<Border>
<Stackpanel vertical>
<label></label>
<Stackpanel horizontal>
<label></label>
</stackpanel>
<label>
<textblock TextWrapping="Wrap">
</label>
</border>
</stackpanel>
</page>
我在这里缺少什么?我应该检查其他元素吗?我已经确定没有任何嵌套元素指定任何高度 - 它们都设置为自动。
答案 0 :(得分:7)
我会继续发布这个作为答案以防万一其他人被困在这上面。
当您设置Width
控件的Height
和TextBlock
属性时,它将首先水平增加,以容纳之前之前的文本>包装文本(如果TextWrapping
属性设置为Wrap)。一旦确定需要包装文本,如果Height
设置为自动,文本框将垂直调整大小以容纳文本(直到它到达您放入的任何UI容器的底部)。如果您不希望文本框调整到某个点之后,则需要为MaxWidth
和MaxHeight
属性设置值。这将强制TextBlock
以一定的宽度换行。
答案 1 :(得分:1)
使用我的XamlPadX,这包装:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="300">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Vertical">
<Label>L1</Label>
<StackPanel Orientation="Horizontal">
<Label>L2</Label>
</StackPanel>
<Label>
<TextBlock TextWrapping="Wrap">
This text wraps.
This text wraps.
This text wraps.
This text wraps.
This text wraps.
This text wraps.
This text wraps.
</TextBlock>
</Label>
</StackPanel>
</StackPanel>
</Page>
所以问题必定在其他地方。