SilverlightはShape
基本クラスから派生したカスタム要素の作成をサポートしていないため、同じ方法で動作するクラスを生成することはできません。
Silverlightでカスタムシェイプを作成できない理由は、SilverlightがWPFの「ビジュアルレイヤー」を共有しないためです。何をしようとしているのかを完全に理解したい場合は、SilverlightとWPFとの違いを理解する必要があります。
WPFでは、完全に異なる2つのレベル(ビジュアルレイヤーまたはフレームワークレイヤー)で作業できます。次の2つの段落をスキップします。ビジュアルレイヤのサービスは、WindowsBase.dllおよびPresentationCore.dllによって提供されます。これは、基本的なレンダリングと入力サービスを提供します。しかし、スタイリング、データバインディング、レイアウト、テンプレートなどのようなものが必要な場合は、フレームワークサービスが必要です。これらはPresentationFramework.dllによって提供されます。シェイプタイプ - Rectangle
、Path
など - はすべてフレームワークタイプで、FrameworkElement
から派生し、データバインディング、レイアウト、アニメーションなどをサポートしています。しかし、これらはビジュアルレイヤーの上に実装されています。リフレクターまたはILDASMのShape
タイプのいずれかを見ると、すべてがOnRender
メソッドをオーバーライドしていることがわかります。実際の形状が定義されているコードがここにあります。 (OnRender
はビジュアルレイヤーの機能です)。ビジュアルレイヤーは完全にサポートされ、ドキュメント化されたAPIなので、WPFで独自の図形を自由に書くことができます。組み込みのシェイプクラス。
Silverlightでは、このビジュアル/フレームワークを区別しません.Weightlightでは、WPFのビジュアルレイヤーが本質的にフレームワークレイヤーに折りたたまれています。したがって、ReflectorまたはILDASMの形状タイプを見ると、OnRender
メソッドが含まれていないことがわかります。これらはほとんど空です。これは、Silverlightでは形状がすべて組み込みであるためです。プラグインにはEllipse
、Path
などの特殊な処理が組み込まれています。そのため、Silverilghtでは、一連の図形が拡張されていません。 Silverlightでオーバーライドする方法はありません。OnRender
SilverlightでShape
から派生した独自のカスタムクラスを作成することはできません。
したがって、カスタムControl
またはUserControl
のいずれかが行く方法です、私は恐れています。これにより、MouseEnter
とMouseLeave
は機能しなくなります。あなたは実際にそれらが動作しないことが分かったのですか?あるいは、彼らはうまくいかないと仮定していますか?
元のクラスを投稿すると、さらに回答が得られる場合があります。他の人があなたのためにそれをすぐに書き換えることができました。がんばろう。 –
これはSilverlightフォーラムhttp://forums.silverlight.net/forums/p/39904/113634.aspxで解決されていない問題で、Silverlight 4のサブクラス化のソリューションでさえも可能です(http://blogs.msdn.com/b /nickkramer/archive/2009/12/03/subclassing-shape-or-more-accurately-path.aspx)はDefiningGeometryプロパティの問題を解決しません。私たちはこれに対する解決策に恩恵を払うべきです。 – Alain