我试图让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>
正如您所看到的,文本被剪切在&#34; h&#34;在第1行和&#34; e&#34;之后的文本在第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}},以便它知道何时应该开始包装文本:
答案 2 :(得分:0)
所以似乎不可能允许溢出文本呈现(不剪切) - 甚至不能将ClipToBound设置为false。
我的解决方案是避免使用普通的文本换行,而是将所有“”替换为文本中的“\ r \ n”,并接受我在每个单词后面得到一个新行。在我的情况下,这不是问题所以它对我有用。