9

動的データ表示 WPF チャートを使用しています。グラフにプロットされた曲線上のすべてのポイントの横にラベルを表示する必要があります。

正確な機能は次のとおりです。

  1. すべての曲線には、そのデータと、色、マーカーの形状などを含む説明を保持するオブジェクトがあります。また、その特定の曲線に対してラベルを表示する必要があるかどうかも教えてくれます。

  2. チェックボックスを使用して、プロット上のすべての曲線上のすべてのポイントのラベルを非表示/表示するオプションもあります。

  3. ユーザーがマーカーを左クリックして、その横にラベルを表示できる 3 番目のオプションがあります。

ここで、各ポイントの ElementMarkerPointGraph と共にラベルを追加し、ラベルの可視性を設定することで、以前に実装しました。このアプローチではパフォーマンスが大幅に低下することはわかっています。

私は今、私が提供する場所でテキストをキャンバスに直接レンダリングできるソリューションを作成しようとしています。また、キャンバスからテキストを削除する方法についても助けが必要です。

キャンバスにテキストをネイティブに追加する方法はありますか? そうするための最も効率的な方法は何ですか?

編集:プロッターがズームするにつれて、テキストを移動する必要があります。プロッターがいつズームするかは既にわかっているので、テキストを適切な場所に移動できるようにする必要があります。

4

3 に答える 3

22

これがズームの目的を与えるかどうかはわかりませんが、以下のコードを使用してキャンバス内にテキストを追加できます..グーグル中にサイトから取得しました.

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);
}
于 2012-11-14T07:26:59.587 に答える
5

わかった。私の正確な実装はここには掲載できません。しかし、私はそれを行う方法のいくつかのアイデアを提供することができます.

したがって、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));
    }
}

さらにサブクラス化/オーバーライドしたくない場合は、クラスを封印できます。

それはそれについてです。描画コンテキストで利用可能な他のメソッドをチェックして、他のことを行うことができます。:)

于 2012-11-27T06:17:26.870 に答える
2

私は自分でそれを理解しました。これを処理するために OnRender メソッドをオーバーライドします。描画コンテキストを使用してテキストを描画できます。

于 2012-11-14T08:43:13.830 に答える