You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式更好地禁用WPF RichTextBox的自动文本换行功能?

WPF RichTextBox 编程开关自动换行替代方案

方案1:使用原生TextWrapping属性(首选)

直接操作RichTextBox自带的TextWrapping依赖属性即可实现自动换行开关,无宽度阈值问题,滚动条可自适应内容宽度:

// 禁用自动换行
MainRtb.TextWrapping = TextWrapping.NoWrap;
MainRtb.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;

// 启用自动换行(恢复默认)
MainRtb.TextWrapping = TextWrapping.Wrap;
MainRtb.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;

如果出现内容右侧留白,可同步清除FlowDocument默认内边距:

MainRtb.Document.PagePadding = new Thickness(0);

方案2:动态适配PageWidth(兼容旧版本场景)

如果业务场景必须操作FlowDocument的PageWidth属性,可放弃固定写死最大值的方式,改为动态计算内容实际宽度赋值,解决固定阈值和滚动条异常问题:

// 内容变更时同步更新PageWidth匹配实际内容宽度
private void UpdateNoWrapPageWidth(object sender, TextChangedEventArgs e)
{
    // 临时设置为最大值计算内容实际尺寸
    MainRtb.Document.PageWidth = 1000000d;
    MainRtb.UpdateLayout();
    // 取内容实际宽度加少量冗余避免边界字符截断
    double actualWidth = MainRtb.Document.DocumentPages.First().ContentBox.Width + 10;
    MainRtb.Document.PageWidth = actualWidth;
}

// 调用禁用自动换行
public void DisableWordWrap()
{
    MainRtb.TextChanged += UpdateNoWrapPageWidth;
    UpdateNoWrapPageWidth(null, null);
}

// 调用启用自动换行
public void EnableWordWrap()
{
    MainRtb.TextChanged -= UpdateNoWrapPageWidth;
    MainRtb.Document.PageWidth = double.NaN;
}

内容的提问来源于stack exchange,提问作者Micsupreeme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:24:03