轉自http://blog.csdn.net/rrrrssss00/article/details/6167497
首先使用介面裝載.style檔案,注意.style檔案需要用到ESRI.ArcGIS.Framework.StyleGalleryClass類,而非ServerStyleGallery類,這個類是用來讀取.serverstyle檔案的
- //獲取現有的Styles,初始狀態下,styleGalleryStorage中是沒有東西的,但styleGalley裡邊是有東西的(ESRI預設那些樣式)
- IStyleGallery styleGalley = new ESRI.ArcGIS.Framework.StyleGalleryClass();
- IStyleGalleryStorage styleGalleryStorage = styleGalley as IStyleGalleryStorage;
- int styleCount = styleGalleryStorage.FileCount;
- //判斷所選擇的檔案是否已經裝載,若尚未載入,則載入之
- bool styleExit = false;
- for (int i = 0; i < styleCount; i++)
- {
- if (styleGalleryStorage.get_File(i) == this.pathBox.Text)
- styleExit = true;
- }
- if (styleExit == false)
- styleGalleryStorage.AddFile(Path);
載入Sytle檔案中某個指定的Symbol(以Marker為例):
- //載入Style檔案中某個指定的Symbol
- IStyleGalleryItem styleGalleryItem;
- IEnumStyleGalleryItem enumStyleGalleryItem = null;
- //載入某個Marker Symbol
- string markerSymbolName = "TestMarker1";
- //這裡三個引數,第一個是ClassName,也就是StyleManager中右邊樹狀選單中的第二級節點名(如Reference Systems,Labels,Marker Symbols等),可以參考下面的圖
- //第二個引數是StyleSet名,若是自定義的Style檔案的話,一般就是檔案路徑,也可以參考StyleManager中右邊樹狀選單的第一級節點名(如D:/test.style),可以參考下面的圖
- //第三個引數是Category名,使用""的話會將該Class和StyleSet下的所有內容都列出來,若指定某個Category,則僅列出該類別下的內容
- enumStyleGalleryItem = styleGalley.get_Items("Marker Symbols", styleset, "");
- enumStyleGalleryItem.Reset();
- styleGalleryItem = enumStyleGalleryItem.Next();
- while (styleGalleryItem != null)
- {
- if (styleGalleryItem.Name == markerSymbolName)
- {
- IMarkerSymbol symbol = (IMarkerSymbol)styleGalleryItem.Item;
- break;
- }
- styleGalleryItem = enumStyleGalleryItem.Next();
- }
- System.Runtime.InteropServices.Marshal.ReleaseComObject(enumStyleGalleryIte
附圖:StyleManager,看其中左邊樹狀選單,第一級節點(ESRI.style),即為StyleSet,對應get_Items函式的第二個引數,第二級節點(例如Reference System等)即為ClassName,對應第一個引數,右側的列表中,可以看到每一個元素的Category,對應第三個引數