扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注

简介: 原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol只能支持文字正向显示。

原文 http://blog.csdn.net/esricd/article/details/7587136

在ArcGIS API for Silverlight/WPF中原版的TextSymbol只能支持文字正向显示。在很多实际项目中,往往需要文字标注有一些角度甚至是沿线标注,下面 我们来看一下原装的TextSymbol和扩展后的TextSymbol的比较和实现思路。

要实现右图的效果只需要从TextSymbol继承一个Symbol并增加Rotation属性,并加载相应的控件模板就行了。

以下是控件模板的代码:

[html] view plain copy
  1. <ControlTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  3. xmlns:esri="http://schemas.esri.com/arcgis/client/2009"  
  4. xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">  
  5.     <TextBlock Text="{Binding Symbol.Text}"   
  6.                FontFamily="{Binding Symbol.FontFamily}"   
  7.                FontSize="{Binding Symbol.FontSize}"   
  8.                Foreground="{Binding Symbol.Foreground}">  
  9.         <TextBlock.RenderTransform>  
  10.             <CompositeTransform Rotation="{Binding Symbol.TextRotation}"/>  
  11.         </TextBlock.RenderTransform>  
  12.     </TextBlock>  
  13. </ControlTemplate>  

控件模板中需要绑定对象中的文本、字体、字号、颜色、角度五个属性。

对象类的加载XAML代码如下:

[csharp] view plain copy
  1. base.ControlTemplate = XamlReader.Load(LoadXaml("LabelSymbol.xaml")) as ControlTemplate;  
  2.   
  3.   
  4.   
  5.   
  6.   
  7. public static string LoadXaml(string FileName)  
  8.          {  
  9.             string xamlstring;  
  10.             var assemblyName = new AssemblyName(Assembly.GetExecutingAssembly().FullName);  
  11.             string CurrentAssemblyName = assemblyName.Name;  
  12.             string resourceName = string.Format("{0};component{1}{2}", CurrentAssemblyName, "/", FileName);  
  13.             Uri uri = new Uri(resourceName, UriKind.Relative);  
  14.             StreamResourceInfo streamResourceInfo = Application.GetResourceStream(uri);  
  15.             using (Stream resourceStream = streamResourceInfo.Stream)  
  16.             {  
  17.                 using (StreamReader streamReader = new StreamReader(resourceStream))  
  18.                 {  
  19.                     xamlstring = streamReader.ReadToEnd();  
  20.                 }  
  21.             }  
  22.             return xamlstring;  
  23.         }  

对象类中再定义对应的五个属性就能实现有倾斜角度的标注了。最终实现效果如图:

 

 

后话:

这个扩展的Symbol仅仅是对文字符号增加旋转角度,其中还有不完善的地方,在线路转角的地方标注的时候往往会与线交叉,如:

如果再深入完善一下,稍做修改可以将标注做成真正的沿线标注,如:

沿线文本在网上有大量的资料,在这里就不再啰嗦了,希望本文对各位ArcGIS API for Silverlight开发人员有帮助。

目录
相关文章
|
定位技术
ArcGIS:如何对Shapefile文件进行符号系统修改、标注、合并、分割、拓扑编辑等?
ArcGIS:如何对Shapefile文件进行符号系统修改、标注、合并、分割、拓扑编辑等?
2875 0
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
1461 1
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
646 0
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
549 0
ArcGIS修改图层标签标注(Label)对应字段与内容的方法
ArcGIS修改图层标签标注(Label)对应字段与内容的方法
737 1
|
人工智能 数据可视化 API
ArcGIS API for Python
ArcGIS API for Python
296 0
|
数据可视化 数据管理 API
​​​​​​​ARCGIS API for Python进行城市区域提取
​​​​​​​ARCGIS API for Python进行城市区域提取
​​​​​​​ARCGIS API for Python进行城市区域提取
arcgis api 3.X 修改自带弹窗样式 2022年6月12日
自带的弹窗介绍: arcgis api 3.X 修改自带弹窗样式插图 /*修改原有弹窗的css样式*/ /* 弹窗整体 */ .esriPopup { font-size: 16px; box-shadow: 10px 10px 5px #888888; } .esriPopup .sizer { position: relative; width: 400px; /* 弹窗宽度 */ z-index: 1; } /* 标题部分 */ .esriPopup .titlePane { background-color: rgba(7
ArcGIS:要素标注时报错:未找到要素,无法验证表达式
ArcGIS:要素标注时报错:未找到要素,无法验证表达式
904 0
|
JavaScript 前端开发 应用服务中间件
Arcgis api for javascript 详细部署
Arcgis api for javascript 详细部署
570 0