button wpf 自动换行_WPF RichTextBox不自动换行

这是一个关于WPF扩展类的实现,用于处理FlowDocument内容的自动换行和转换为FormattedText。类中包含获取文档运行和段落的方法,以及将FlowDocument转换为FormattedText的逻辑,支持设置文本属性如字体、样式和颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

usingSystem;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Documents;usingSystem.Windows.Media;namespacePrintTime

{///

///RichTextBox长度自动增长 扩展类///

public static classFlowDocumentExtensions

{private static IEnumerableGetRunsAndParagraphs(FlowDocument doc)

{for (TextPointer position =doc.ContentStart;

position!= null && position.CompareTo(doc.ContentEnd) <= 0;

position=position.GetNextContextPosition(LogicalDirection.Forward))

{if (position.GetPointerContext(LogicalDirection.Forward) ==TextPointerContext.ElementEnd)

{

Run run= position.Parent asRun;if (run != null)

{yield returnrun;

}else{

Paragraph para= position.Parent asParagraph;if (para != null)

{yield returnpara;

}

}

}

}

}public static FormattedText GetFormattedText(thisFlowDocument doc)

{if (doc == null)

{throw new ArgumentNullException("doc");

}//doc.PagePadding = new System.Windows.Thickness(0, 0, 0, 0);//设置文本的边距

FormattedText output = newFormattedText(

GetText(doc),

CultureInfo.CurrentCulture,

doc.FlowDirection,newTypeface(doc.FontFamily, doc.FontStyle, doc.FontWeight, doc.FontStretch),

doc.FontSize,

doc.Foreground);int offset = 0;foreach (TextElement el inGetRunsAndParagraphs(doc))

{

Run run= el asRun;if (run != null)

{int count =run.Text.Length;

output.SetFontFamily(run.FontFamily, offset, count);

output.SetFontStyle(run.FontStyle, offset, count);

output.SetFontWeight(run.FontWeight, offset, count);

output.SetFontSize(run.FontSize, offset, count);

output.SetForegroundBrush(run.Foreground, offset, count);

output.SetFontStretch(run.FontStretch, offset, count);

output.SetTextDecorations(run.TextDecorations, offset, count);

offset+=count;

}else{

offset+=Environment.NewLine.Length;

}

}returnoutput;

}private static stringGetText(FlowDocument doc)

{

StringBuilder sb= newStringBuilder();foreach (TextElement el inGetRunsAndParagraphs(doc))

{

Run run= el asRun;

sb.Append(run== null ?Environment.NewLine : run.Text);

}returnsb.ToString();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值