gpt4 book ai didi

c# - 如何绘制格式化文本(如果不在 onRender 方法中)

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:01 25 4
gpt4 key购买 nike

我画了一些椭圆并将它们添加到网格中。

然后我想为每个 Ellipse 添加一些 FormattedText。我可以通过获取椭圆的 RectangleBounds 来做到这一点。

但是下面这个例子:

http://msdn.microsoft.com/en-us/library/bb613560.aspx#FormattedText_Object

我需要一个 DrawingContext 来绘制文本。但是,如果我不想覆盖 onRender,我怎样才能获得 DrawingContext?

最佳答案

您可以改用DrawingGroup。它有一个返回 DrawingContextOpen 方法,您可以使用它来构建绘图。

然后您需要安排该绘图以某种方式出现在 UI 中。最简单的方法是将其包装在 DrawingBrush 中,并使用它来绘制 UI 中的一些现有元素。例如,如果您有一个名为 myEllipse 的椭圆,这会将其 Fill 属性设置为基于 DrawingBrush包含一位 FormattedText 的 DrawingGroup:

var drawing = new DrawingGroup();
using (var context = drawing.Open())
{
var text = new FormattedText("This is some text",
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface("Calibri"),
30,
Brushes.Green);
context.DrawText(text, new Point(0, 0));
}

var db = new DrawingBrush(drawing);
db.Stretch = Stretch.None;
myEllipse.Fill = db;

如果您已经用其他东西填充了 Ellipse,您有两个选择。您可以向此绘图添加更多内容 - 您可以根据需要对上下文进行任意多次调用。例如,如果我在调用 context.DrawText 之前添加它:

context.DrawRectangle(Brushes.Cyan, null, new Rect(0, 0, 300, 100));

我会在文本后面设置一个青色背景。 (当然,您需要调整这些示例中的坐标以适合您的布局。)

但是添加一个额外的元素来托管绘图可能比尝试将其搭载到一个可以做其他事情的元素中更简单。因此,您可以将 Rectangle 元素直接放置在 Ellipse 上,并使用 DrawingBrush,例如 Fill > 对于那个 RectangleRectangle 实际上看起来不是矩形,因为此 DrawingBrush 并未在其整个区域中绘制。因此,效果看起来与将 TextBlock 分层放置在 Ellipse 上时的效果非常相似。

关于c# - 如何绘制格式化文本(如果不在 onRender 方法中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4330722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com