ArcGIS API for Silverlight程式碼中使用Template模板
在專案開發中,會遇到點選中聚焦閃爍效果,但是因為在使用Symbol的時候,會設定一定的OffSetX和OffSetY,所以聚焦閃爍的時候,有些情況下,會出現閃爍點的位置和Symbol的位置不重疊現象,下面的方法就是解決這個問題的。
1、在Silverlight專案中新建一個資料夾Template,新建一個DefaultMarkerSymbol.xaml的Silverlight資源字典檔案,如下圖:
2、開啟DefaultMarkerSymbol.xaml檔案,刪掉裡面的內容,拷貝如下的內容:
<ControlTemplate
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
xmlns:esri="http://schemas.esri.com/arcgis/client/2009"
>
<Canvas>
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualState x:Name="Normal">
<Storyboard RepeatBehavior="Forever">
<DoubleAnimation BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)" From="1" To="5" Duration="00:00:01" />
<DoubleAnimation BeginTime="0:0:0" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" From="1" To="5" Duration="00:00:01" />
<DoubleAnimation BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.Opacity)" From="1" To="0" Duration="00:00:01" />
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Ellipse Height="25" Width="25" Canvas.Left="0" Canvas.Top="0" RenderTransformOrigin="0.5,0.5" x:Name="ellipse" IsHitTestVisible="False">
<Ellipse.RenderTransform>
<ScaleTransform />
</Ellipse.RenderTransform>
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="#00FF0000" />
<GradientStop Color="#FFFF0000" Offset="0.25" />
<GradientStop Color="#00FF0000" Offset="0.5" />
<GradientStop Color="#FFFF0000" Offset="0.75" />
<GradientStop Color="#00FF0000" Offset="1" />
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Ellipse Height="20" Width="20" Canvas.Left="0" Canvas.Top="0" Fill="#FFFF0000" x:Name="ellipse1" />
</Canvas>
</ControlTemplate >
3、Silverlight程式程式碼中使用,這裡是通過選中ListBox中的站點名稱,進行聚焦顯示,方法如下:
private void lbSearchSite_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
RainFall findResult = e.AddedItems[0] as RainFall;
Graphic g = new Graphic()
{
Geometry = mercator.FromGeographic(new MapPoint(double.Parse(findResult.Latitute.ToString().Trim()), double.Parse(findResult.Longitute.ToString().Trim())))
};
MarkerSymbol symbol = new MarkerSymbol();
string contentStr = new StreamReader(
Application.GetResourceStream(
new Uri("/MapClient;component/Template/DefaultMarkerSymbol.xaml", UriKind.Relative)
).Stream).ReadToEnd();
symbol.ControlTemplate = (ControlTemplate)XamlReader.Load(contentStr);
symbol.OffsetX = 10;
symbol.OffsetY = 10;
g.Symbol = symbol;
ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(g.Geometry).Extent; //選中點的位置
double expandPercentage = 10;
//加數值後,聚焦(這裡需要注意,進行地理座標和墨卡託座標的轉換)
double widthExpand = (selectedFeatureExtent.Width + 5) * (expandPercentage / 100);
double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);
ESRI.ArcGIS.Client.Geometry.Envelope displayExtent = new Envelope(WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMin - (widthExpand / 2), selectedFeatureExtent.YMin - (heightExpand / 2))), WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMax + (widthExpand / 2), selectedFeatureExtent.YMax + (heightExpand / 2))))
{
SpatialReference = new SpatialReference(102100)
};
try
{
//聚焦
myMap.ZoomTo(displayExtent);
ShowFocus(g);
}
catch (Exception)
{
}
}
/// <summary>
/// 顯示聚焦點
/// </summary>
public void ShowFocus(Graphic g)
{
GraphicsLayer graphicsLayerSW = myMap.Layers["GraphicsLayerRed"] as GraphicsLayer;
//產生紅色光暈
if (graphicsLayerSW.Graphics.Count < 1)
{
graphicsLayerSW.Graphics.Add(g);
}
else
{
graphicsLayerSW.Graphics.RemoveAt(0);
graphicsLayerSW.Graphics.Add(g);
}
}
相關文章
- ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用APISymbol
- ArcGIS API for Silverlight之ElementLayer使用注意點API
- ArcGIS API for Silverlight 學習筆記API筆記
- ArcGIS API for Silverlight中載入Google地形圖(瓦片圖)APIGo
- ArcGIS API for Silverlight 載入google地圖APIGo地圖
- ArcGIS API for Silverlight 繪製降雨路徑動畫API動畫
- ArcGIS API for Silverlight開發入門準備API
- 建立第一個ArcGIS API for Silverlight應用API
- ArcGIS API for Silverlight實現地圖測距功能API地圖
- ArcGIS API for Silverlight 查詢點閃爍顯示API
- ArcGIS API for Silverlight動態標繪的實現API
- c++ 模板模板引數("Template Template Parameters")C++
- ArcGIS API for Silverlight 呼叫GP服務繪製等值面API
- ArcGIS API for Silverlight載入google地圖(後續篇)APIGo地圖
- ArcGIS API for Silverlight載入BingMap遙感地圖API地圖
- ArcGIS API for Silverlight開發中常用問題彙總API
- ArcGIS API for Silverlight 滑鼠移動顯示地理座標API
- ArcGIS API for JS 中的styleAPIJS
- Go HTML/template 模板使用方法GoHTML
- ArcGIS API for Silverlight 中根據座標點在地圖上打標記API地圖
- ArcGIS API for Silverlight 地圖中解決點眾多的簇解決方法API地圖
- Django模板templateDjango
- ArcGIS API for Silverlight 查詢點聚焦的一個注意點API
- TeamTopologies/Team-API-template:用於定義團隊拓撲中團隊API 的模板API
- ArcGIS API for Silverlight 解決眾多密集點分層顯示API
- ArcGIS API for Silverlight 點選地圖彈出自定義窗體API地圖
- ArcGIS API for Silverlight 呼叫GP服務載入等值線圖層API
- ArcGIS API for Silverlight 實現修改地圖上的工程點位置API地圖
- 模板方法模式(Template)模式
- ArcGIS API for Silverlight 點選地圖上的要素,彈出視窗(使用Telerik RadWindow)API地圖
- ArcGIS API for Silverlight 地圖載入進度條類之MapProgressBarAPI地圖APP
- AS 使用 Flutter 程式碼模板Flutter
- ArcGIS API for Silverlight地圖載入眾多點時,使用Clusterer解決重疊問題API地圖
- c++11-17 模板核心知識(十二)—— 模板的模板引數 Template Template ParametersC++
- Python:Template模板字串Python字串
- c++11-17 模板核心知識(十四)—— 解析模板之依賴型模板名稱 Dependent Names of Templates(.template/->template/::template)C++
- ArcGIS API for Silverlight 動態圖層(ArcGISDynamicMapServiceLayer)的顯示與隱藏API
- 收集的一些關於ArcGIS API for Silverlight開發的連線API