更改FormattedText的文本

3
我正在使用以下方法将文本写入我的MainWindow。我的问题是,是否有办法在创建FormattetText或drawingvisual后更改其文本?如果我希望在运行时更新它,应该使用另一种方法来编写文本吗?
private Visual WriteText()
{   
   DrawingVisual drawingVisual = new DrawingVisual();
   using (DrawingContext drawingContext = drawingVisual.RenderOpen())
   {   
        FormattedText ft = new FormattedText("Hello world", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Klavika"), 10, Brushes.Red);
        drawingContext.DrawText(ft, new Point(0, 0));
   }
   return drawingVisual;
}

你需要重新创建绘图视觉。 - Rohit Vats
有没有绕过重新创建它的方法,因为这是我在程序运行时一直要做的事情。 - user602996
绘制视觉效果非常快速。重新创建它不会影响您的应用程序。试一试吧。 - Rohit Vats
1
不要混淆重新创建和重新渲染。每次文本更改时不要创建新的DrawingVisual。只需绘制到现有的一个中,就像Miky给出的答案中所示。 - Clemens
@Clemens - 是的,我的错误。我是指重新渲染。 - Rohit Vats
1个回答

4

一旦创建了FormattedText对象,就无法更改其文本内容,但可以更改Visual对象的内容。如果您有要更改的DrawingVisual的引用,可以使用类似于您的方法的方式:

 private Visual UpdateVisual(DrawingVisual drawingVisual, string updatedText)
 {
     using (DrawingContext drawingContext = drawingVisual.RenderOpen())
     {   
          FormattedText ft = new FormattedText(updatedText, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Klavika"), 10, Brushes.Red);
          drawingContext.DrawText(ft, new Point(0, 0));
     }
     return drawingVisual;
 }

谢谢,那正是我所需要的。 - user602996
1
如果在protected o methodverride void OnRender(DrawingContext dc)中执行,这不是重度内存浪费吗? - Dr.Sai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接