通常の WPF レンダリングをハイジャックして、コントロールをプリミティブに分割し、レイアウト管理を行い、バインディングなどを適用したいと思います。
私が理解している限り、WPF でのレンダリング全体は、依存関係プロパティ システムによって定義された値を使用して、レイアウト マネージャーによって計算された位置でのプリミティブ (テキスト、画像、線、曲線) のレンダリングに要約されます。独自のプリミティブ レンダリング ロジックを提供できれば、たとえばカスタム ドキュメント タイプにレンダリングしたり、ネットワーク経由で実際のレンダリング用にプリミティブを転送したりできます。
私の計画は次のとおりです。
- カスタムを実装します
DrawingContext
。は、、などDrawingContext
の一連のメソッドを定義する抽象クラスです。この機能には、独自の実装を提供する必要があります。DrawEllipse
DrawText
DrawImage
- WPF
UserControl
を作成し、指定された .xml に強制的にレンダリングしますDrawingContext
。
ただし、次の問題が発生しました。
DrawingContext
簡単にオーバーライドできない抽象内部メソッドvoid PushGuidelineY1(double coordinate)
とが含まれています。void PushGuidelineY2(double leadingCoordinate, double offsetToDrivenCoordinate)
(もしかしたら、これを克服するためのトリックがあるのでしょうか?)- ビジュアル全体
DrawingContext
を?にレンダリングする方法はないようです。なんで?
私は次のようなことができます
void RenderRecursively(UIElement e, DrawingContext ctx)
{
e.OnRender(ctx);
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(e); i++)
RenderRecursively((UIElement)VisualTreeHelper.GetChild(e, i), ctx);
}
—しかし、をレンダリングする直接的な方法があるのだろうかUIElement
. (もちろん、この問題は小さな問題ですが、インフラストラクチャがないことを考えると、これが適切な方法であるかどうか疑問に思います。)
DrawingContext
では、から継承するためのものではありませんか? カスタムを提供するという全体的なアイデアはDrawingContext
正しい方向への一歩ですか、それとも戦略を再考する必要がありますか? カスタム コンテキストへの描画は WPF でサポートされていますか、それとも別のインターセプト ポイントを探す必要がありますか?