文本块中的标签自动换行不起作用

4

我有一个WPF页面上有很多对象。在所有这些项目的底部,我有一个标签需要在内容中换行。使用Textblock应该很容易实现这个答案。然而,即使我使用这些项,我仍然无法让文本换行。因此,我认为必须检查/修改其他对象中的其他设置。伪代码中,我的XAML看起来像这样:

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

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


你的文本块是否自动调整大小?如果是的话,换行可能不会生效。 - Chad La Guardia
不确定我理解了那个。因为它可能是1、2或X行,难道你不需要自动调整大小吗?如果不应该自动调整大小,那么应该是什么? - Unknown Coder
1
自动调整大小将扩展文本块的宽度,以适应换行之前的文本。尝试给它一个maxwidth属性。 - Chad La Guardia
2个回答

7

如果有其他人卡在这里,我将发布此答案。 当您设置TextBlock控件的Width和Height属性时,它会先水平增加其大小以容纳尽可能多的文本,并在换行文本之前(如果TextWrapping属性设置为Wrap)。 一旦它决定需要换行文本,如果Height设置为Auto,则文本框将垂直调整大小以适应文本(直到达到放置它的任何UI容器的底部)。 如果您不希望文本框超过某个点进行调整大小,那么您需要为MaxWidth和MaxHeight属性设置值。 这将强制TextBlock在特定宽度处换行。


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>

所以问题一定出在别的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接