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

南楼画角 提交于 2019-12-22 11:37:46
原文:ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

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

//动态添加文本
TextSymbol textSymbol = new TextSymbol()
{
        FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"),
        Foreground = new System.Windows.Media.SolidColorBrush(Color.FromArgb(255, 255, 0, 0)),
        FontSize = 14,
        Text = item.ZDMC,
        OffsetX = 12,
        OffsetY = -5
};

Graphic graphicText1 = new Graphic()
{
         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))),
         Symbol = textSymbol
};

graphicText1.Attributes["TextYLZMC"] = item.ZDMC;
graphicsLayer1.Graphics.Add(graphicText1);

 


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

//动态添加带背景颜色的文字信息
 Border b = new Border();
 b.Background = new SolidColorBrush(Colors.Blue);
 b.Height = 20;
 b.CornerRadius = new CornerRadius(5);
 TextBlock tb = new TextBlock();
 tb.Text = item.ZDMC;
 tb.Foreground = new SolidColorBrush(Colors.White);
 tb.HorizontalAlignment = HorizontalAlignment.Center;
 tb.FontSize = 15;
 b.Child = tb;

 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))));
 elementLayer.Children.Add(b);

效果如下

 

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

          <esri:TextSymbol x:Key="SWZTextSymbol">
                <esri:TextSymbol.ControlTemplate>
                    <ControlTemplate>
                        <Border Background="White" BorderBrush="Black" CornerRadius="5"  BorderThickness="1,1,1,1">
                            <TextBlock
                                Width="70"
                                FontSize="14" 
                                Text="{Binding Attributes[TextSWZMC]}" //注意这里的TextSWZMC,和后台代码中要一致
                                Foreground="Blue"
                                FontFamily="Microsoft YaHei"
                                HorizontalAlignment="Center" />
                        </Border>
                    </ControlTemplate>
                </esri:TextSymbol.ControlTemplate>
            </esri:TextSymbol>


 

  TextSymbol textSymbol = LayoutRoot.Resources["SWZTextSymbol"] as TextSymbol; //这里和模板的Key名称要一致
  textSymbol.OffsetX = 15;
  textSymbol.OffsetY = -15;

  Graphic graphicText = new Graphic()
   {
         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))),
         Symbol = textSymbol
   };
   graphicText.Attributes["TextSWZMC"] = item.ZDMC; //注意这里的TextSWZMC,和前台xaml代码中要一致
   graphicsLayer11.Graphics.Add(graphicText);



 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!