3

私は楕円やその他の図形を画面上のマーカーとして使用しています。他のユーザーがテンプレートを使用してこれらのビジュアルを変更できるようにしたいと考えています。ただし、形状はテンプレート化をサポートしていないため、デフォルトで楕円を表示する基本的な UserControl を作成し、基本形状の代わりにそれを使用する必要があります。

誰かがよりきちんとした解決策を持っていますか? これらを画面上に何千も作成すると、パフォーマンス/メモリが少しオーバーヘッドになるのではないかと少し心配しています。

4

1 に答える 1

4

UserControlから派生しContentControlます。コンテンツ (図形内に追加のコントロールをホストする機能) が必要なようには思えないので、階層を上っていきます...

祖先の内訳は次のとおりです。

UserControl
    ContentControl
        Control
            FrameworkElement
                UIElement
                    Visual
                        ...

Controlプロパティを定義するTemplateので、あなたが望むものを達成するための最も軽い手段は使用することだと思いますControl:

<Control Style="{StaticResource MyStyle}"/>

...そして a を使用して、Style必要なテンプレートとトリガーなどを設定します。

ただし、シェイプ内に子要素をホストする必要がある場合は、次のように使用する必要がありますContentControl

<ContentControl Style="{StaticResource MyStyle}"/>

このアプローチが実行時に重すぎることがわかった場合は、Shapeの使用を検討してください。

Shape
    FrameworkElement
        UIElement
            Visual
                ...

ShapeControlから継承するのではなく、 から直接継承しFrameworkElementます。テンプレート化できません。これは抽象クラスであり、プロパティを介して独自のプレゼンテーションを記述する方法を知っている独自のカスタム サブクラスを作成する必要がありDefiningGeometryます。これは でスタイルを定義するよりも複雑かもしれませんControlが、追加のパフォーマンスが必要な場合は、この方法を使用する必要があります。

編集DrawingVisualもチェックしてみてください。MSDN から:

DrawingVisual は、形状、画像、またはテキストのレンダリングに使用される軽量の描画クラスです。このクラスは、パフォーマンスを向上させるレイアウトまたはイベント処理を提供しないため、軽量と見なされます。

テンプレート化もできませんが、生のパフォーマンスが必要な場合は一見の価値があります。

于 2009-02-19T08:40:10.733 に答える