使用 WrapWithOverflow 时如何使 TextBlock 呈现溢出的文本? (没有剪辑)

Posted

技术标签:

【中文标题】使用 WrapWithOverflow 时如何使 TextBlock 呈现溢出的文本? (没有剪辑)【英文标题】:How do I make TextBlock render overflowing text when using WrapWithOverflow? (without clipping) 【发布时间】: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,您的文字被截断了。 我认为这与边距无关。即使我明确告诉它不要剪辑,溢出的文本也会被剪辑。 【参考方案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”,并接受我在每个单词后换行。就我而言,这不是问题,所以它对我有用。

【讨论】:

以上是关于使用 WrapWithOverflow 时如何使 TextBlock 呈现溢出的文本? (没有剪辑)的主要内容,如果未能解决你的问题,请参考以下文章

在片段中使用 CoordinatorLayout 时如何使状态栏透明

WPF中使用TextBlock显示长字符串的处理方法

更改密码时如何使 OAuth 令牌无效?

使用 NAudio 使用 asioout 录制时如何使声音更大?

使用 smoothScrollToPosition() 函数时如何使 ListView 的滚动变慢?

使用 MVVM 时,如何使 TextBox 成为“密码框”并显示星星?