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

时间:2014-05-21 10:05:15

标签: wpf

我试图让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>

enter image description here

更新

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

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

enter image description here

使用此代码:

<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>

正如您所看到的,文本被剪切在&#34; h&#34;在第1行和&#34; e&#34;之后的文本在第3行,即使我告诉它不剪辑任何溢出的内容。我希望渲染溢出的文本,而不是剪裁。

3 个答案:

答案 0 :(得分:0)

你的标记很好,你的问题是你缩小窗口的空间比显示你可以用Margin="100" {{1}}播放的文字的空间更多。

答案 1 :(得分:0)

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

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

在WPF中包装文本的技巧是设置Width的{​​{1}},以便它知道何时应该开始包装文本:

enter image description here

答案 2 :(得分:0)

所以似乎不可能允许溢出文本呈现(不剪切) - 甚至不能将ClipToBound设置为false。

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