如何以编程方式更好地禁用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
相关产品推荐
相关产品推荐

