Silverlight中使用SimpleFillSymbol引发类型转换错误崩溃求助
解决方案
1. 修正XAML元素嵌套错误
错误核心是将SimpleFillSymbol直接放入了仅支持UIElement类型的容器集合中(比如Map、GraphicsLayer的子元素区域)。SimpleFillSymbol是符号类,不属于UIElement,不能作为容器的直接子元素,需作为Graphic的Symbol属性或Renderer的子元素使用:
错误示例:
<esri:Map x:Name="MyMap"> <!-- 错误:Map的子元素只能是Layer类型,不能直接放Symbol --> <esri:SimpleFillSymbol Color="Red" /> </esri:Map>
正确示例1:为单个Graphic设置符号
<esri:Map x:Name="MyMap"> <esri:GraphicsLayer> <esri:Graphic> <!-- 将Symbol嵌套在Graphic的Symbol属性下 --> <esri:Graphic.Symbol> <esri:SimpleFillSymbol Color="Blue" Fill="#800000FF" BorderThickness="1" BorderBrush="Black" /> </esri:Graphic.Symbol> <esri:Graphic.Geometry> <esri:Polygon> <esri:Polygon.Rings> <esri:PointCollection> <esri:Point X="-100" Y="40" /> <esri:Point X="-90" Y="40" /> <esri:Point X="-90" Y="30" /> <esri:Point X="-100" Y="30" /> </esri:PointCollection> </esri:Polygon.Rings> </esri:Polygon> </esri:Graphic.Geometry> </esri:Graphic> </esri:GraphicsLayer> </esri:Map>
正确示例2:用Renderer批量设置图层符号
<esri:Map x:Name="MyMap"> <esri:GraphicsLayer x:Name="MyGraphicsLayer"> <!-- 通过Renderer统一设置图层内所有Graphic的符号 --> <esri:GraphicsLayer.Renderer> <esri:SimpleRenderer> <esri:SimpleRenderer.Symbol> <esri:SimpleFillSymbol Color="Green" Fill="#8000FF00" /> </esri:SimpleRenderer.Symbol> </esri:SimpleRenderer> </esri:GraphicsLayer.Renderer> </esri:GraphicsLayer> </esri:Map>
2. 确保DLL版本兼容性
- 检查所有引用的ESRI相关DLL(如
ESRI.ArcGIS.Client.dll、ESRI.ArcGIS.Client.Toolkit.dll)版本完全一致,避免混合不同版本的SDK文件 - 确认ArcGIS Silverlight SDK版本与项目目标Silverlight版本匹配(例如SDK 5.0对应Silverlight 5,是目前Silverlight的最终版本)
3. 项目配置验证
- 右键项目→属性→Silverlight,确认目标Silverlight版本与SDK要求一致
- 由于主流浏览器已停止支持Silverlight,测试时需使用IE兼容模式或专门的Silverlight测试工具(如Silverlight Developer Runtime)
内容的提问来源于stack exchange,提问作者abramhum
相关产品推荐
相关产品推荐

