您将无法生成以相同方式工作的类,因为 Silverlight 不支持创建从Shape
基类派生的自定义元素。
无法在 Silveright 中创建自定义形状的原因是 Silverlight 不共享 WPF 的“可视层”。如果您想完全了解为什么您正在尝试的事情是不可能的,您需要了解 Silverlight 与 WPF 的不同之处。(如果您不在乎,请跳过接下来的 2 段。)
在 WPF 中,您可以在两个完全不同的级别上工作:可视层或框架层。可视层的服务由 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 中是不可扩展的。Silverlight中没有OnRender
覆盖的方法。因此,您根本无法编写自己的从Shape
Silverlight 派生的自定义类。
因此,恐怕要走习惯Control
或将要走的路。UserControl
不过,这不应该阻止MouseEnter
andMouseLeave
的工作。你真的发现那些不起作用吗?还是您只是假设它们不起作用?