【问题标题】:Changing the text of a FormattedText更改 FormattedText 的文本
【发布时间】:2013-11-24 16:16:43
【问题描述】:

我正在使用以下方法将文本写入我的 MainWindow。我的问题是,有没有办法在创建 FormattetText 或绘图视觉后更改它的文本? 或者如果我想在运行时更新文本,我应该使用其他方法来编写文本吗?

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;
}

【问题讨论】:

  • 您必须重新创建绘图视觉对象。
  • 有没有办法重新创建它,这是我将一直做的事情。当我的程序正在运行时。
  • 绘图视觉渲染速度非常快。重新创建它不会影响您的应用程序。试试看吧。
  • 不要混淆重新创建和重新渲染。 不要在每次文本更改时创建一个新的 DrawingVisual。只需绘制现有的,如 Miky 给出的答案所示。
  • @Clemens - 是的,我的错。仅表示重新渲染。

标签: c# wpf drawingcontext formatted-text drawingvisual


【解决方案1】:

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;
 }

【讨论】:

  • 谢谢,这正是我所需要的
  • 如果完成 protected o methodoverride void OnRender(DrawingContext dc) 是否不是重负荷内存浪费
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2017-01-04
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2014-02-07
相关资源
最近更新 更多