Textblock中的标签自动换行不起作用

时间:2011-08-12 17:23:30

标签: wpf textwrapping

我有一个包含很多对象的WPF页面。在所有这些项目的底部,我有一个标签,需要在内容中进行文本换行。答案很简单,使用Textblock这应该很简单。然而,即使我使用这些项目,我仍然无法得到文本包装。所以我假设在我需要检查/修改的其他对象中必须有其他设置。在伪代码中,我的XAML看起来像

<Page>
  <Stackpanel vertical>
   <Border>
    <Stackpanel vertical>
     <label></label>
    <Stackpanel horizontal>
     <label></label>
    </stackpanel>
   <label>
    <textblock TextWrapping="Wrap">
   </label>
  </border>
 </stackpanel>
</page>

我在这里缺少什么?我应该检查其他元素吗?我已经确定没有任何嵌套元素指定任何高度 - 它们都设置为自动。

2 个答案:

答案 0 :(得分:7)

我会继续发布这个作为答案以防万一其他人被困在这上面。

当您设置Width控件的HeightTextBlock属性时,它将首先水平增加,以容纳之前之前的文本>包装文本(如果TextWrapping属性设置为Wrap)。一旦确定需要包装文本,如果Height设置为自动,文本框将垂直调整大小以容纳文本(直到它到达您放入的任何UI容器的底部)。如果您不希望文本框调整到某个点之后,则需要为MaxWidthMaxHeight属性设置值。这将强制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>

所以问题必定在其他地方。