Har*_*sha 7 c# wpf xaml dynamic-data-display
我正在使用动态数据显示WPF图表.我要求在图表上绘制的曲线上的每个点旁边显示一个标签.
确切的功能如下:
每条曲线都有一个保存其数据的对象和一个包含颜色,标记形状等的描述.它还告诉我标签是否必须对该特定曲线可见.
还有一个选项可以使用复选框隐藏/显示图表上所有曲线上所有点的标签.
还有第三种选择,用户可以左键单击标记并在其旁边看到标签.
现在,我之前通过为每个点添加标签和ElementMarkerPointGraph以及设置标签的可见性来实现它.我知道这种方法可以带来巨大的性能损失.
我现在正在寻找创建一个解决方案,我可以将文本直接渲染到我提供的位置的画布上.我还需要帮助从画布中删除文本.
有没有办法在画布上原生添加文本?最有效的方法是什么?
编辑:我需要在绘图仪放大时移动文本.我已经知道当绘图仪缩放时,我需要能够将文本移动到适当的位置.
hri*_* pv 17
我不确定这是否会给你缩放目的,但下面的代码可以用来在画布中添加文本..我在google搜索时从网站上获取它.
private void Text(double x, double y, string text, Color color)
{
TextBlock textBlock = new TextBlock();
textBlock.Text = text;
textBlock.Foreground = new SolidColorBrush(color);
Canvas.SetLeft(textBlock, x);
Canvas.SetTop(textBlock, y);
canvasObj.Children.Add(textBlock);
}
Run Code Online (Sandbox Code Playgroud)
好的。我的具体实现不能放在这里。但我可以提供一些关于如何做到这一点的想法。
因此,创建一个从 Canvas 派生的简单用户控件。
class CustomCanvas : Canvas
{
protected override void OnRender(DrawingContext dc)
{
FormattedText someFormattedText = new FormattedText(someText, System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
someTypeFace, someFontSize, someColor);
dc.DrawText(someFormattedText, new Point(15, 15));
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不希望它进一步被子类化/覆盖,您可以密封该类。
就是这样。您可以查看绘图上下文中可用的其他方法来执行其他一些操作。:)