【问题标题】:How do I make TextBlock render overflowing text when using WrapWithOverflow? (without clipping)使用 WrapWithOverflow 时如何使 TextBlock 呈现溢出的文本? (没有剪辑)
【发布时间】:2014-05-21 10:05:15
【问题描述】:

我正在尝试让 WPF TextBlock 包装它的文本,并且仍然呈现溢出的文本。

我尝试将 ClipToBounds 设置为 false,但它仍然会剪切溢出的文本。有什么办法可以解决这个问题?

<Window x:Class="overflow_test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
  <Grid>
    <Grid Margin="100" ClipToBounds="False">
      <TextBlock Text="wefeiqwufhqoeirugfh qeorghuiqeo riguh qeroguihqerogiuqhergo qerhugqeuirhgeiug oqeirugh qoeruig" TextWrapping="WrapWithOverflow" ClipToBounds="False" />
    </Grid>
  </Grid>
</Window>

更新

在我的真实场景中(这里提供的只是为了说明问题)我在 itemscontrol 中有许多文本块,它们具有相同的固定宽度。我无法调整每个项目的宽度以完全适合文本而不会溢出,但是我需要使用 WrapWithOverflow 来避免在使用标准 Wrap 时会得到的单个字符的换行。因此,当使用 WrapWithOverflow 时,我假设溢出的文本已被剪切,并且我可以通过将 ClipToBounds 设置为 false 来关闭它。但是仍然会剪切溢出的文本。我觉得这很奇怪,也许这是一个错误?

另一张图片显示了我的意思:

使用此代码:

<Window x:Class="overflow_test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="308">
  <Grid>
    <TextBlock Width="110" HorizontalAlignment="Center" ClipToBounds="False" VerticalAlignment="Center" Background="White" Text="wefeiqwufhqoeirugfh qeorghuiqeo riguh qeroguihqerogiuqhergo qerhugqeuirhgeiug oqeirugh qoeruig" TextWrapping="WrapWithOverflow" Margin="100,120,90,120" />
  </Grid>
</Window>

如您所见,文本被剪辑在第 1 行的“h”和第 3 行的“e”之后的文本,即使我告诉它不要剪辑任何溢出的内容。我希望渲染溢出的文本,而不是剪辑。

【问题讨论】:

  • 准确地解释你想要什么......你的描述令人困惑。
  • 一点也不奇怪...@JamshidAsadzadeh 已经向您解释过,由于您的Grid.Margin,您的文字被截断了。
  • 我认为这与边距无关。即使我明确告诉它不要剪辑,溢出的文本也会被剪辑。

标签: wpf


【解决方案1】:

当我说请准确解释你想要什么时,我想你实际上可能会更详细地描述你想要什么。如果您刚刚使用Margin 将其从Grid 中删除,您的代码已经看起来像您想要的输出...试试这个:

<TextBlock Text="wefeiqwufhqoeirugfh qeorghuiqeo riguh qeroguihqerogiuqhergo 
    qerhugqeuirhgeiug oqeirugh qoeruig" TextWrapping="WrapWithOverflow" 
    HorizontalAlignment="Center" VerticalAlignment="Center" Width="160" />

在 WPF 中环绕文本的技巧是设置 WidthTextblock 以便它知道何时应该开始环绕文本:

【讨论】:

    【解决方案2】:

    您的标记很好,您的问题是您缩小了窗口,超出了显示文本的空间,您可以使用Margin="100" 来了解我的观点。

    【讨论】:

      【解决方案3】:

      因此,似乎不可能允许溢出的文本呈现(而不是剪辑)——即使将 ClipToBound 设置为 false。

      我的解决方案是避免使用普通的文本换行,而是将文本中的所有“”替换为“\r\n”,并接受我在每个单词后换行。就我而言,这不是问题,所以它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        • 1970-01-01
        • 2020-06-17
        • 1970-01-01
        • 2022-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多