私は楕円やその他の図形を画面上のマーカーとして使用しています。他のユーザーがテンプレートを使用してこれらのビジュアルを変更できるようにしたいと考えています。ただし、形状はテンプレート化をサポートしていないため、デフォルトで楕円を表示する基本的な UserControl を作成し、基本形状の代わりにそれを使用する必要があります。
誰かがよりきちんとした解決策を持っていますか? これらを画面上に何千も作成すると、パフォーマンス/メモリが少しオーバーヘッドになるのではないかと少し心配しています。
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
...
Shape
Control
から継承するのではなく、 から直接継承しFrameworkElement
ます。テンプレート化できません。これは抽象クラスであり、プロパティを介して独自のプレゼンテーションを記述する方法を知っている独自のカスタム サブクラスを作成する必要がありDefiningGeometry
ます。これは でスタイルを定義するよりも複雑かもしれませんControl
が、追加のパフォーマンスが必要な場合は、この方法を使用する必要があります。
編集DrawingVisualもチェックしてみてください。MSDN から:
DrawingVisual は、形状、画像、またはテキストのレンダリングに使用される軽量の描画クラスです。このクラスは、パフォーマンスを向上させるレイアウトまたはイベント処理を提供しないため、軽量と見なされます。
テンプレート化もできませんが、生のパフォーマンスが必要な場合は一見の価値があります。