ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

来源:互联网 发布:淘宝有哪些美食 编辑:程序博客网 时间:2024/05/01 20:37


   

在开发中动态在地图上添加文字信息,可以使用TextSymbol添加文字

[csharp] view plaincopyprint?
  1. //动态添加文本  
  2. TextSymbol textSymbol = new TextSymbol()  
  3. {  
  4.         FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"),  
  5.         Foreground = new System.Windows.Media.SolidColorBrush(Color.FromArgb(255, 255, 0, 0)),  
  6.         FontSize = 14,  
  7.         Text = item.ZDMC,  
  8.         OffsetX = 12,  
  9.         OffsetY = -5  
  10. };  
  11.   
  12. Graphic graphicText1 = new Graphic()  
  13. {  
  14.          Geometry = mercator.FromGeographic(new MapPoint(double.Parse(item.Latitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture), double.Parse(item.Longitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture))),  
  15.          Symbol = textSymbol  
  16. };  
  17.   
  18. graphicText1.Attributes["TextYLZMC"] = item.ZDMC;  
  19. graphicsLayer1.Graphics.Add(graphicText1);  

 


如果要考虑给文字加背景颜色的话,该类就无法起作用了

[csharp] view plaincopyprint?
  1. //动态添加带背景颜色的文字信息  
  2.  Border b = new Border();  
  3.  b.Background = new SolidColorBrush(Colors.Blue);  
  4.  b.Height = 20;  
  5.  b.CornerRadius = new CornerRadius(5);  
  6.  TextBlock tb = new TextBlock();  
  7.  tb.Text = item.ZDMC;  
  8.  tb.Foreground = new SolidColorBrush(Colors.White);  
  9.  tb.HorizontalAlignment = HorizontalAlignment.Center;  
  10.  tb.FontSize = 15;  
  11.  b.Child = tb;  
  12.   
  13.  ElementLayer.SetEnvelope(b, new Envelope(new MapPoint(double.Parse(item.Latitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture), double.Parse(item.Longitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture))),new MapPoint(double.Parse(item.Latitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture), double.Parse(item.Longitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture))));  
  14.  elementLayer.Children.Add(b);  

效果如下

 

提供第二种方法,使用TextSymbol的模板使用:

[csharp] view plaincopyprint?
  1. <esri:TextSymbol x:Key="SWZTextSymbol">  
  2.       <esri:TextSymbol.ControlTemplate>  
  3.           <ControlTemplate>  
  4.               <Border Background="White" BorderBrush="Black" CornerRadius="5"  BorderThickness="1,1,1,1">  
  5.                   <TextBlock  
  6.                       Width="70"  
  7.                       FontSize="14"   
  8.                       Text="{Binding Attributes[TextSWZMC]}" //注意这里的TextSWZMC,和后台代码中要一致  
  9.                       Foreground="Blue"  
  10.                       FontFamily="Microsoft YaHei"  
  11.                       HorizontalAlignment="Center" />  
  12.               </Border>  
  13.           </ControlTemplate>  
  14.       </esri:TextSymbol.ControlTemplate>  
  15.   </esri:TextSymbol>  


 

[csharp] view plaincopyprint?
  1. TextSymbol textSymbol = LayoutRoot.Resources["SWZTextSymbol"as TextSymbol; //这里和模板的Key名称要一致  
  2. textSymbol.OffsetX = 15;  
  3. textSymbol.OffsetY = -15;  
  4.   
  5. Graphic graphicText = new Graphic()  
  6.  {  
  7.        Geometry = mercator.FromGeographic(new MapPoint(double.Parse(item.Latitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture), double.Parse(item.Longitute.ToString().Trim(), System.Globalization.CultureInfo.InvariantCulture))),  
  8.        Symbol = textSymbol  
  9.  };  
  10.  graphicText.Attributes["TextSWZMC"] = item.ZDMC; //注意这里的TextSWZMC,和前台xaml代码中要一致  
[csharp] view plaincopyprint?
  1. graphicsLayer11.Graphics.Add(graphicText);  


0 0
原创粉丝点击