Dash-Dot
WPF では、パスがシーケンスから離れて描画される方法を変更できる方法はありますか? 私が描いているパスまたは小さな三角形、波など、描画パス自体に三重線を描きたいとします。私はブラシを試しましたが、それに従いませんPath
。助けてください
どうも
Dash-Dot
WPF では、パスがシーケンスから離れて描画される方法を変更できる方法はありますか? 私が描いているパスまたは小さな三角形、波など、描画パス自体に三重線を描きたいとします。私はブラシを試しましたが、それに従いませんPath
。助けてください
どうも
WPF のGeometry
クラスには、これを簡単に行うために必要なすべてのプリミティブがありますが、コードで行う必要があります。カスタム ラインを作成する必要がある場合、通常は にDrawing
基づいて をGeometry
構築しますが、あなたの場合は、Geometry
3 本のラインが平行に配置された を構築し、それをストロークするだけです。
PathGeometry.CreateFromGeometry()
を取得しますPathGeometry
GetWidenedPathGeometry()
して、必要な間隔を渡して、エッジが側線に対応する新しいジオメトリを取得します。CombinedGeometry
ステップ 3 の詳細: 拡張されたジオメトリには、元の線の終点に線分があります。これにより、線の端を横切って線が引かれ、多くの状況で美的に美しく見えます。これがないと状況が良くなる場合は、サイド ライン ジオメトリを繰り返し、元のパスの終点を通過するすべての線分を削除することで、これを削除します。
上のコードは、端を打ち切らなければ約 8 行、打ち切れば 15 行かかります。
これを便利にするための秘訣は、アタッチされているコントロールのData
プロパティを効果的に強制するアタッチ プロパティを作成することです。Path
このような添付プロパティを使用すると、次のように記述する必要があります。
<Path TripleStroke.Enable="true" Data="..." />
添付プロパティを実装し、それらにハンドラーを登録する方法を知っていれば、これは簡単なことです。そうでない場合は、添付プロパティのアプローチを実装する前に、添付プロパティをコーディングして値の強制をシミュレートする方法を数時間かけて学習することを計画してください。
アップデート
上で説明した基本的な手法は、パスに沿って任意のパターンを適用できるように拡張することもできます。例については、Expression Design ツールのカスタム ブラシを参照してください。ただし、これを行うために WPF に組み込まれているものは何もないため、自分で作成する必要があります。経験から、それは大変な作業であることがわかります。基本的な手順は次のとおりです。
最初にGeometry
、既存Drawing
の とエンド キャップなどのいくつかのパラメータを受け取るメソッドを作成し、によって指定されたパスに沿って指定されたDrawing
を繰り返す新しい を作成します。次に、ストローク パスを簡単に描画できます。カスタム ストロークを記述する を作成し、変換メソッドを呼び出すコンバーターでを含むを使用してストロークを表示します。Drawing
Geometry
Drawing
DrawingVisual
Binding
変換メソッドを実際に実装するには:
GeometryDrawing
ます (私もサポートしましImageDrawing
たが、3D システムを使用して画像を引き伸ばす必要があるため、これはより複雑です)。これは、DrawingGroup
オブジェクトを再帰的に実行し、変換を追跡し、適切な変換を使用して GeometryDrawings を構築することによって行われます。GeometryDrawing
繰り返し、ジオメトリ内のすべての座標に適切な座標変換を適用してオブジェクトを繰り返し複製します。また、手順 1 では、同等のものを作成するためにGlyphRunDrawings
使用されていることにも注意してください。FormattedText.BuildGeometry
GeometryDrawing
WPF でこれを行う方法はサポートされていません。ソリューションには、複合 Path オブジェクトまたは凝ったコード ビハインドの体操のいずれかが含まれます。特にトリプルライン パスの実装をお探しですか?