Shape
Silverlight は基本クラスから派生するカスタム要素の作成をサポートしていないため、同じように機能するクラスを作成することはできません。
Silverlight でカスタム シェイプを作成できない理由は、Silverlight が WPF の「ビジュアル レイヤー」を共有していないためです。試みていることが不可能な理由を完全に理解したい場合は、ここで Silverlight が WPF とどのように大きく異なるかを理解する必要があります。(気にしない場合は、次の 2 つの段落をスキップしてください。)
WPF では、ビジュアル レイヤーまたはフレームワーク レイヤーという 2 つのまったく異なるレベルで作業できます。ビジュアル レイヤーのサービスは、WindowsBase.dll と PresentationCore.dll によって提供されます。これにより、基本的なレンダリングおよび入力サービスが提供されます。ただし、スタイル設定、データ バインディング、レイアウト、テンプレート作成などが必要な場合は、フレームワーク サービスが必要です。これらは、PresentationFramework.dll によって提供されます。形状タイプ ( Rectangle
、Path
など) はすべてフレームワーク タイプであり、派生元でFrameworkElement
あり、データ バインディング、レイアウト、アニメーションなどをサポートします。しかし、これらはビジュアル レイヤーの上に実装されていShape
ます。Reflector または ILDASM のいずれかの型を見ると、それらがすべてOnRender
メソッドをオーバーライドしていることがわかります。実際の形状を定義するコードはそこに存在します。(OnRender
はビジュアル レイヤー関数です。) また、ビジュアル レイヤーは完全にサポートされ、文書化された API であるため、WPF で独自の形状を自由に記述できます。形状クラスで。
Silverlight では、このビジュアル/フレームワークの区別はありません。Silverlight では、WPF のビジュアル レイヤーは本質的にフレームワーク レイヤーに折りたたまれています。したがって、Reflector または ILDASM の形状タイプを見ると、OnRender
メソッドが含まれておらず、ほとんど空であることがわかります。これは、Silverlight では形状がすべて組み込みであるためです。プラグインにはEllipse
、 、Path
、およびその他すべての形状の特別な処理が組み込まれています。そのため、Silverilght では形状のセットを拡張することはできません。OnRender
Silverlight でオーバーライドする方法はありません。Shape
そのため、Silverlightから派生する独自のカスタム クラスを作成することはできません。
だから、習慣Control
か、どちらかUserControl
が進むべき道になると思います。MouseEnter
ただし、これによりandの動作が停止することはありませんMouseLeave
。それらが機能しないことを実際に発見しましたか?それとも、うまくいかないと思っているだけですか?