如何在实例化Paragraph时设置属性?或修改Run文本不重置属性
解决方法
方法一:直接修改现有Run的文本(推荐)
你完全不需要重新创建Paragraph对象,直接修改已存在的Run的Text属性就能保留之前配置的边框等属性。
有两种实现方式:
- 提前把
Run存为变量:
// 初始化时把Run单独存起来 var run = new Run(""); var par = new Paragraph(run); par.BorderBrush = Brushes.Black; ThicknessConverter converter = new ThicknessConverter(); par.BorderThickness = (Thickness)converter.ConvertFromString("0.02cm"); // 后续直接修改Run的文本 run.Text = "new text";
- 如果没提前存变量,也可以从
Paragraph的Inlines集合里找到对应的Run:
// 假设par内只包含一个Run元素 var existingRun = par.Inlines.FirstOrDefault() as Run; if (existingRun != null) { existingRun.Text = "new text"; }
方法二:实例化新Paragraph时复制原有属性(不推荐)
如果一定要重新创建Paragraph,可以把旧对象的属性值复制到新对象上,但这种方式会产生不必要的对象创建开销,不如方法一高效:
var newPar = new Paragraph(new Run("new text")); // 复制原有配置的属性 newPar.BorderBrush = par.BorderBrush; newPar.BorderThickness = par.BorderThickness; // 其他需要保留的属性也按此方式复制 par = newPar;
另外,你也可以用对象初始化器简化Paragraph的初始化代码,让属性设置更紧凑:
var par = new Paragraph(new Run("")) { BorderBrush = Brushes.Black, BorderThickness = (Thickness)new ThicknessConverter().ConvertFromString("0.02cm") };
但这只是优化初始化写法,核心还是尽量避免通过重新创建Paragraph来修改文本。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

