1

これが私の最初の質問です。

しかし、私の質問に対する本当の答えは見つかりませんでした。

私は視覚化プログラムに取り組んでおり、C# と WPF を使用しています。

ツリーマップを描画する必要があります。私は実際に Rectangle オブジェクトを作成し、Canvas に追加します。これは、これらの四角形にイベント ハンドラー (マウス クリック) も追加するため、非常にうまく機能し、非常に便利です。

ただ、演出に問題あり。四角形を追加して Stroke プロパティ (SolidColorBrush) を設定すると、プロセス全体が極端に遅くなります。それらのストロークが設定されていなくても、速度は問題ありません。

新しく作成した Canvas オブジェクトに Rectangle オブジェクトを追加してから、この新しい Canvas オブジェクトを元の Canvas オブジェクトに追加することで、パフォーマンスを少し改善しました (したがって、すべての四角形が元の Canvas の直接の子であるとは限らないため、高速化に役立ちます)。

したがって、私の質問は、速度を損なうことなく、これらすべての Rectangles に Stroke を追加する方法です。

リンクで、「ストロークなし」と「ストローク付き」のツリーマップ バージョンの比較を見つけることができます。

ストロークのないツリーマップ

ストローク付きのツリーマップ

ご助力ありがとうございます!

編集:

わかりました、私は解決策を見つけました!

最初にここに書いて申し訳ありませんが、解決策を見つけるためにすでに何時間も検索しましたが、問題は使用しているSolidColorBrushであることがわかりました!

私はこのようなものを持っています:

public static SolidColorBrush TreeMapBorderBrush;

そして、この Brush を使用して、Canvas に追加する必要があるすべての Rectangle の Stroke プロパティを設定します。しかし、まさにそれが問題でした。

以前のコードは次のようになっていました。

rect.Stroke = Visualization_Helper.TreeMapBorderBrush;

私は今これに変更しました:

rect.Stroke = Visualization_Helper.TreeMapBorderBrush.Clone();

そのため、現在、各 Rectangle でそのブラシのコピーのみを使用しています。これにより、Stroke がないように処理が高速化されます (私の質問のように)。

ご参考まで!変!

4

0 に答える 0