標籤:
原文地址:http://support.esrichina-bj.cn/2009/0728/1007.html
文章編號 : 37033
軟體: ArcGIS API for Microsoft Silverlight/WPF 9.3.1
作業系統: N/A
摘要:
ArcGIS API for Microsoft Silverlight/WPF 包含一個PictureMarkerSymbol 類,使用一個圖片表徵圖來渲染graphic點. 象API中的其它符號一樣,它的內容通過一個控制項範本定義。
PictureMarkerSymbol 控制項範本定義如下:
<ControlTemplate xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image Source="{Binding Symbol.Source}"
Opacity="{Binding Symbol.Opacity}"
Stretch="Fill"
Width="{Binding Symbol.Width}"
Height="{Binding Symbol.Height}" />
</ControlTemplate>
當分配給一個graphic時(例如,Graphic.Symbol),一個Image控制項執行個體被建立。如果同一個picture marker symbol被分配給500個graphic點,圖片就被解碼500次。導致的結果,初始graphic渲染將變得相對緩慢。儘管符號被綁定到一個圖片資源,並且因此在500個graphics中共用(僅下載一次),但是圖片解碼不會共用。
為了減少與PictureMarkerSymbol使用的Image控制項相關的經常開銷,使用ImageBrush為符號建立一個客戶化控制項範本。
說明描述了如何使用ImageBrush替代PictureMarkerSymol以加強graphic的顯示效能。
內容:
從一個擁有Fill屬性,可以被設定為任何類型brush的容器(例如,Rectangle)入手。使用ImageBrush來引用靶心圖表片(image),以便用來符號化graphics。ImageBrush負責解碼圖片,因此它可以在所有將使用它的graphic要素中共用。那麼,當客戶化符號被分配給500個graphic點時,500個矩形執行個體將被建立(正如模板中定義的),但是只有一個Image Brush被產生。下面是用於符號的基礎控制項範本:
<ControlTemplate
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Rectangle Fill="{Binding Symbol.Fill}"
Opacity="{Binding Symbol.Opacity}"
Width="{Binding Symbol.Width}"
Height="{Binding Symbol.Height}" />
</ControlTemplate>
從使用包含在ArcGIS API for Microsoft Silverlight/WPF 中的MarkerSymbol類,或者從scratch建立一個新的客戶化符號入手。無論是哪種情況,客戶化marker 符號類都應該有一個公用的Fill屬性,它可以被用於綁定到刷子。這裡僅是一個樣本,顯示如何為MarkerSymbol類定義一個客戶化控制項範本:
<Grid.Resources>
<ImageBrush ImageSource="/images/i_pushpin.png" x:Name="MyImageBrush" />
<esriSymbols:MarkerSymbol x:Name="MyPictureMarker" OffsetX="10" OffsetY="10">
<esriSymbols:MarkerSymbol.ControlTemplate>
<ControlTemplate>
<Rectangle Fill="{StaticResource MyImageBrush}"
Opacity="0.75" Width="20" Height="20" />
</ControlTemplate>
</esriSymbols:MarkerSymbol.ControlTemplate>
</esriSymbols:MarkerSymbol>
</Grid.Resources>
建立時間:2009-07-28
最新動向: 2010-06-22
[轉]Howto: 使用ImageBrush替換PictureMarkerSymbol以加強graphic顯示效能