0

ユーザーがポリゴンの頂点にアドナーをドラッグしてシェイプを伸ばしたりサイズを変更したりできる WPF プログラムを作成しようとしています。頂点をマウスでつかんでドラッグすると、頂点がその位置にあるポリゴンが再描画されます。全体的な形状をリサイズするために変更できる幅/高さフィールドは知っていますが、やりたいことは、頂点位置のみを変更し、ポリゴン ラインを新しい頂点位置で本質的に新しいポリゴンを再描画することです。

これまでのところ、静的なサイズのポリゴン (長方形) を描画し、角に装飾を配置する機能がありますが、問題は、装飾をドラッグすると、装飾ボックスが多角形の頂点に留まらないことです。これは、装飾が描かれているキャンバス全体ではなく、多角形の位置 (装飾された要素) に対して相対的に描画されるためだと思います。

形状に関連するのではなく、単に装飾を画面座標に配置する方法があるかどうか疑問に思っています。私の論理はonRender()、ポリゴンの頂点を位置として使用してアドナーボックスを描画し、マウスドラッグ機能でマウスの位置を取得してポリゴンの頂点を直接変更し、それによってアドナーが描画される座標も変更できるということです。これまでのところ、これを行う方法を見つけることができませんでした。これは可能ですか?図形のサイズが変更されたときに頂点にスナップするように、常に頂点に装飾を描画できますか? そうでない場合、誰かがこれを行う別の方法を知っていますか?

4

1 に答える 1

0

少し遊んだ後、私は解決策にたどり着きました。まず、WPFが実際に装飾者のレンダリングを処理する方法についてもう少し理解することが重要です。これは本当に私を助け、それがどのように機能するかについての良い説明を与えました:それが適用される要素が変更されたときに私の装飾者がなぜ再レンダリングしないのですか?

私にとっての主な問題は、invalidateVisual()を呼び出して、手動でOnRender()関数を呼び出し、装飾/ポリゴンの頂点位置を変更する必要があることです。もう1つは、Stretchプロパティがnoneに設定されていることを確認することです。元々塗りつぶしに設定していたので、ポイントがオフセットされ、正しくレンダリングできなくなります。その後、adorners OnRender()関数が、polygon.points porpertyをadornerのdraw呼び出しに渡すことにより、ポリゴンの頂点にadornerを描画することを確認する必要がありました。

于 2012-09-19T14:08:40.747 に答える