WP7中ListBox中的TextBlock无法自动换行

5

我有一个 ListBox,其中包含水平排列的 StackPanel,每个 StackPanel 包含一个 TextBlock 和一个 Image,后面跟着一个 ContentPresenter。以下是 XAML 代码:

<Grid x:Name="ContentPanel"
      Grid.Row="1"
      Margin="12,0,12,0">
  <ListBox x:Name="MainListBox"
           Margin="12,0,12,0"
           SelectionChanged="MainListBox_SelectionChanged">
    <ListBox.ItemTemplate>
      <DataTemplate>

        <StackPanel>
          <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu x:Name="ContextMenu"
                                 Opened="ContextMenu_Opened">
              <toolkit:MenuItem Header="edit"
                                Tag="edit"
                                Click="MenuItem_Click" />
              <toolkit:MenuItem Header="delete"
                                Tag="delete"
                                Click="MenuItem_Click" />
            </toolkit:ContextMenu>
          </toolkit:ContextMenuService.ContextMenu>
          <StackPanel Orientation="Horizontal"
                      HorizontalAlignment="Left">

            <!-- **** This text won't wrap **** -->
            <TextBlock Text="{Binding Header}"
                       TextWrapping="Wrap"
                       Style="{StaticResource PhoneTextNormalStyle}"
                       Foreground="{StaticResource PhoneAccentBrush}" />

            <Image Source="/image.png"
                   Visibility="{Binding ImageVisibility}" />

          </StackPanel>

          <ContentPresenter Content="{Binding Content}"
                            HorizontalAlignment="Stretch" />

        </StackPanel>

      </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment"
                Value="Stretch" />
      </Style>
    </ListBox.ItemContainerStyle>
  </ListBox>
</Grid>

我在页面构造函数中将ListBox的ItemsSource设置为ObservableCollection。一切工作正常,直到Header文本过长时,它不会按照我指定的方式换行。我该如何强制TextBlock换行文本?
谢谢您的帮助!
1个回答

8
这很可能是因为没有限制TextBlock的宽度,导致它在屏幕外水平增长,无法看到。

但是 TextWrapping 属性不应该解决这个问题吗?还有其他解决这个问题的方法吗?例如,使用 Grids 而不是 StackPanels 来容纳 UI 元素。 - Praetorian
如果没有任何限制,我不确定TextWrapping如何知道水平边界在哪里。 - Mick N
你是对的,我通过为 TextBox 添加 SizeChanged 事件并根据页面宽度设置其宽度来解决了问题。 - Praetorian

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