WPF 关于TextBlock换行问题

trh138320 2016-07-15 03:10:30

问题是:当TextBlock即将换行时遇到了标点符号,会导致其自动换行,但是目前来讲并不希望他在遇到标点符号时换行,有什么解决办法吗? 最终效果是:只有当这一行满时再换行
...全文
756 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
trh138320 2016-07-20
  • 打赏
  • 举报
回复
引用 9 楼 duanzi_peng 的回复:
把你的测试代码贴出来看看
测试的代码其实相当简单

        <TextBlock TextWrapping="Wrap" Text="地方asdf发更好更丰厚的给“”“”“”“”“”“”“”" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" />
这段是我自己瞎弄的一段XAML代码,但是也能说明问题,目的是限制TextBlock 的宽度但不限制高度,这样好放入ScrollViewer ------------------------------------------

        <TextBlock TextWrapping="Wrap" Text="地方asdf发更好更丰厚的给""""""""""""""""" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" />
------------------------------------------ 但是换做是上面的代码的话,即用的是英文全角符号则不会出现提前换行的问题(之前说过中文符号和英文半角都不行)。大概了解到原因是由于中文输入的规则:行首不能为标点符号,所以必须取连续向上一行取字符直到取到非标点为止。 目前来讲除了自定义控件绘制字符串,希望看能不能修改这个换行规则,即只是简单的字符长度满则换行,不要求有什么格式(个人理解这个应该比原有的换行规则简单)
exception92 2016-07-20
  • 打赏
  • 举报
回复
把你的测试代码贴出来看看
exception92 2016-07-20
  • 打赏
  • 举报
回复
用8给的方式。
  • 打赏
  • 举报
回复
引用 4 楼 trh138320 的回复:
[quote=引用 3 楼 Libby1984 的回复:] TextWrapping枚举有三个值,官方的说明是: Wrap:如果行溢出可用块宽度则进行换行,即使标准换行算法无法确定任何换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况)。 WrapWithOverflow:如果行溢出了可用块宽度,则会进行换行。但是,如果换行算法无法确定换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况),则行可能会溢出块宽度。 NoWrap:未执行换行。 说通俗点就是Wrap可能会导致提前换行,WrapWithOverflow可能会导致换行滞后。其原因就是标准换行算法无法确定换行时机,也就是换行算法的问题。你这种情况,建议你去掉字符串中空格和一些特殊字符,如果还不行换WrapWithOverflow试试。要是还解决不了就只能你自己写代码计算如何换行了。
我现在用的是Wrap,首先肯定不能用NoWrap,我刚才试了一下WrapWithOverflow,对于这个问题依旧没有帮助,是在考虑是否跟这个枚举关系不大呢? 是否有别的解决方案?[/quote] 那你就自己重写一个显示字符串的控件。自定义一个UserControl,然后重写它的OnRender方法,在OnRender用drawingContext.DrawText在指定位置画字符串,自己计算字符串的长度,当到达边界的时候就插入一个换行符“”\r\n”
trh138320 2016-07-19
  • 打赏
  • 举报
回复
引用 6 楼 lshfong 的回复:
这个需要把符号转为全角,做为字符来处理
中文的符号,全角半角都不行,英文的符号,全角可以半角不行。现在的问题是,用户输入的数据全是中文的,这个怎么处理解决?而且如果转为英文全角的话,句号啊,省略号啊好像都没有办法用了
lshfong 2016-07-15
  • 打赏
  • 举报
回复
这个需要把符号转为全角,做为字符来处理
  • 打赏
  • 举报
回复
引用 4 楼 trh138320 的回复:
[quote=引用 3 楼 Libby1984 的回复:] TextWrapping枚举有三个值,官方的说明是: Wrap:如果行溢出可用块宽度则进行换行,即使标准换行算法无法确定任何换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况)。 WrapWithOverflow:如果行溢出了可用块宽度,则会进行换行。但是,如果换行算法无法确定换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况),则行可能会溢出块宽度。 NoWrap:未执行换行。 说通俗点就是Wrap可能会导致提前换行,WrapWithOverflow可能会导致换行滞后。其原因就是标准换行算法无法确定换行时机,也就是换行算法的问题。你这种情况,建议你去掉字符串中空格和一些特殊字符,如果还不行换WrapWithOverflow试试。要是还解决不了就只能你自己写代码计算如何换行了。
我现在用的是Wrap,首先肯定不能用NoWrap,我刚才试了一下WrapWithOverflow,对于这个问题依旧没有帮助,是在考虑是否跟这个枚举关系不大呢? 是否有别的解决方案?[/quote] 去掉里面的空格试试
trh138320 2016-07-15
  • 打赏
  • 举报
回复
引用 3 楼 Libby1984 的回复:
TextWrapping枚举有三个值,官方的说明是: Wrap:如果行溢出可用块宽度则进行换行,即使标准换行算法无法确定任何换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况)。 WrapWithOverflow:如果行溢出了可用块宽度,则会进行换行。但是,如果换行算法无法确定换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况),则行可能会溢出块宽度。 NoWrap:未执行换行。 说通俗点就是Wrap可能会导致提前换行,WrapWithOverflow可能会导致换行滞后。其原因就是标准换行算法无法确定换行时机,也就是换行算法的问题。你这种情况,建议你去掉字符串中空格和一些特殊字符,如果还不行换WrapWithOverflow试试。要是还解决不了就只能你自己写代码计算如何换行了。
我现在用的是Wrap,首先肯定不能用NoWrap,我刚才试了一下WrapWithOverflow,对于这个问题依旧没有帮助,是在考虑是否跟这个枚举关系不大呢? 是否有别的解决方案?
  • 打赏
  • 举报
回复
TextWrapping枚举有三个值,官方的说明是: Wrap:如果行溢出可用块宽度则进行换行,即使标准换行算法无法确定任何换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况)。 WrapWithOverflow:如果行溢出了可用块宽度,则会进行换行。但是,如果换行算法无法确定换行时机(比如说,被限制在不允许滚动的固定宽度容器中的非常长的单词的情况),则行可能会溢出块宽度。 NoWrap:未执行换行。 说通俗点就是Wrap可能会导致提前换行,WrapWithOverflow可能会导致换行滞后。其原因就是标准换行算法无法确定换行时机,也就是换行算法的问题。你这种情况,建议你去掉字符串中空格和一些特殊字符,如果还不行换WrapWithOverflow试试。要是还解决不了就只能你自己写代码计算如何换行了。
trh138320 2016-07-15
  • 打赏
  • 举报
回复
引用 1 楼 a123455o 的回复:
设置 TextWrapping="Wrap" 不是可以吗??
这个就是设置了TextWrapping="Wrap" 的,然后控件自身不允许符号在行首
Struggle_hardllz 2016-07-15
  • 打赏
  • 举报
回复
设置 TextWrapping="Wrap" 不是可以吗??

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧