キャンバスでのWPF要素のクリッピング
-
06-07-2019 - |
質問
インタラクティブなWPFグラフ/ツリーツールで作業しており、ノードとノード間のリンクをキャンバスに配置しています。ノードはユーザーコントロールであり、リンクは単なるラインシェイプです。現在、リンクはノードの中心から別のノードの中心に移動します。
ノードをわずかに透明にしたいときにノードの背後にリンクが表示されると、問題が発生します。 最も便利な解決策は、ラインにクリッピングまたは不透明度マスクを適用することであると考えたので、ノードの背後に描画されませんが、私の人生ではどのように理解できないのですか?
基本的に、ノードの境界ボックスジオメトリを把握して、ラインのクリッピングジオメトリとして使用することはできません。もちろん、代替ソリューションにも興味があります!
解決
VisualTreeHelper.GetContentBounds()メソッドは毎回空を返すようです。
この問題の別の解決策は次で回答されています
2つのWPFの接続アンカーを使用せずに、行ごとにキャンバス要素を追加しますか?
境界ボックスを使用して、交点を見つけて線を描画します。
他のヒント
私はあなたが解決策を再考しているように思えます。なぜリンクのロジックを変更して、ラインが中央からではなくノードの正しい側で開始/終了するようにしないのですか?これを行うには、もう少し計算するだけで済みます。
つまり、ビジュアルの境界ボックスを取得するには、を使用できます。 VisualTreeHelper :: GetContentBounnds ヘルパーメソッド。
同様の作業を行い、ソリューションはリンクとノードを異なるレイヤーに配置することでした。
したがって、ノードをリンクの上に表示し、リンクのヒントをノードで非表示にする場合は、ノードレイヤーがリンクレイヤーの前になるようにレイヤーのzオーダーを変更するだけです。
VisualHostsを使用したレイヤー(VisualHostクラスこちら)ノードとリンクオブジェクトはDrawingVisualsです。
正常に動作し、ノードなどの境界線を見つけることに煩わされる必要はありません。