在 WPF 中,让 TextBlock 根据内容自动换行,核心是设置 TextWrapping="Wrap",并配合宽度约束。
1. 核心属性:TextWrapping
TextWrapping 是枚举,控制换行行为:
NoWrap(默认):不换行,超出部分被截断Wrap:自动换行(按单词 / 空格换行,长单词可能被截断)WrapWithOverflow:换行,但允许长单词超出边界不截断
2. XAML 示例(自动换行)
<!-- 固定宽度,自动换行 -->
<TextBlock
Text="这是一段很长很长的文本内容,会根据 TextBlock 的宽度自动换行显示。"
Width="200"
TextWrapping="Wrap" />
<!-- 自适应父容器宽度,自动换行 -->
<Grid Width="300">
<TextBlock
Text="自适应容器宽度,内容超出自动换行。"
TextWrapping="Wrap"
HorizontalAlignment="Stretch" />
</Grid>
3. C# 后台代码设置
TextBlock textBlock = new TextBlock();
textBlock.Text = "后台代码设置自动换行的长文本...";
textBlock.Width = 200;
textBlock.TextWrapping = TextWrapping.Wrap; // 关键
4. 手动强制换行(固定换行)
-
XAML:用
<TextBlock TextWrapping="Wrap"> 第一行文本 第二行文本 <LineBreak/> 第三行 </TextBlock>
或<LineBreak/> -
C#:用
\n或Environment.NewLinetextBlock.Text = "第一行\n第二行\r\n第三行";
5. 常见问题:换行不生效
- 未设宽度 :TextBlock 必须有 Width/MaxWidth 或父容器限制宽度
- 父容器允许无限宽 (如
ScrollViewer内):需给 TextBlock 设MaxWidth - 长英文 / URL :默认按空格换行,无空格时用
TextTrimming裁剪或加软连字符­
6. 进阶:TextTrimming(省略号)
配合换行,超长末尾显示 ...:
<TextBlock
Text="非常长的文本..."
Width="200"
TextWrapping="Wrap"
TextTrimming="CharacterEllipsis" />
总结 :自动换行 = TextWrapping="Wrap" + 宽度约束