【问题标题】:Wrap text with indent in WPF textBlock在 WPF textBlock 中使用缩进换行文本
【发布时间】:2015-06-10 09:28:23
【问题描述】:

我正在使用列表框来显示带有数据模板的撤消重做列表:

<ListBox x:Name="actionList"
           Height="150"
           HorizontalAlignment="Stretch"
           VerticalAlignment="Stretch"
           MouseMove="ListBoxMouseMove"
           ScrollViewer.VerticalScrollBarVisibility="Visible"
           SelectionMode="Extended"
           Style="{StaticResource CustomListBoxStyle}">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <TextBlock Width="235"
                   HorizontalAlignment="Stretch"
                   VerticalAlignment="Stretch"
                   FontSize="11"
                   Text="{Binding DisplayText}"
                   TextWrapping="Wrap" />
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>

它按预期工作,但对于长撤消重做字符串会发生换行,但它与行的第一个字符对齐。我们希望它缩进一点以清楚地识别两个列表项。图示如下:

我们怎样才能做到这一点。

【问题讨论】:

  • 据我所知,这是不可能的很容易。您必须确定字符串的哪一部分在新行上,并将字符串的那一部分缩进RichTextBox 中。那会引起无数的头痛。也许这里需要改变设计?也许您可以为文本提供一些填充,以便列表中的项目间隔更远。

标签: wpf xaml word-wrap textblock


【解决方案1】:

他们“更简单”的方法可能涉及使用 Paragraph 对象来表示文本。

段落本身支持缩进,其属性包括 TextIndent(控制首行缩进,您可以将其设置为负值)或 Margin(设置整体的边距)段落,但尊重第一行缩进)。

<ListBox.ItemTemplate>
    <DataTemplate>
        // IsHitTestVisible is set to false to avoid FlowDocument's built-in text selection
        //     from disrupting the regular ListBox mouse selection behavior
        <Grid IsHitTestVisible="False">
            <FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Disabled"
                                      ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                 <FlowDocument FontSize="12"
                               FontFamily="Calibri" 
                               Foreground="Black" 
                               PagePadding="0">
                     <Paragraph TextIndent="-10" 
                                Margin="10,0,0,0">
                         <Run Text="{Binding ., Mode=OneWay}" />
                     </Paragraph>
                 </FlowDocument>
            </FlowDocumentScrollViewer>
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

【讨论】:

  • 我们怎样才能把段落作为一个列表框项??
  • 用代码示例编辑了我的答案,并删除了 BindableRun 东西,因为 Run 从 4.0 开始确实是可绑定的(该示例使用 ListView 而不是 ListBox,但您可以看到这个想法:P)跨度>
  • 它确实有效,但失去了列表框功能和样式。我无法显示所选项目和样式相同的任务太多。
  • 我明白了...它适用于 ListView,但我只是检查了 ListBox,就像你说的那样。我设法通过使用IsHitTestVisible="False" 使其按预期工作,因此我将编辑我的答案以防其他人发现它有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2019-11-20
  • 1970-01-01
  • 2013-01-15
  • 2013-08-02
相关资源
最近更新 更多