void SymbolConfigProvider_GetSymbolForResourceDictionary(object sender, GetSymbolsForResourceDictionaryCompletedEventArgs e) { if (e.Symbols == null) { return; } if (Symbols != null) { try { Symbols.Items.Clear(); foreach (SymbolDescription symbolDescription in e.Symbols) { if (symbolDescription == null || symbolDescription.Symbol == null) { continue; } Symbol symbol = symbolDescription.Symbol; double size = 50; ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol markerSymbol = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol; if (markerSymbol != null) { if (!double.IsNaN(markerSymbol.Size)) { size = markerSymbol.Size; } } else if (symbol is FillSymbol || symbol is LineSymbol) { size = 25; } else if (symbol is ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol) { ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol simpleMarkerSymbol = symbol as ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol; if (simpleMarkerSymbol != null && !double.IsNaN(simpleMarkerSymbol.Size)) { size = simpleMarkerSymbol.Size; } } else if (symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol) { ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol sms = symbol as ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol; if (sms != null && !double.IsNaN(sms.Size)) { size = sms.Size; } } SymbolDisplay disp = new SymbolDisplay() { Symbol = symbolDescription.Symbol, Width = size, Height = size, IsHitTestVisible = false // Set to false to prevent mouseover and selection effects }; // Wrap symbol display in a grid to allow cursor and tooltip Grid symbolGrid = new Grid() { Cursor = Cursors.Hand, // Apply nearly transparent background so grid is hit-test visible Background = new SolidColorBrush(Color.FromArgb(1, 255, 255, 255)) }; symbolGrid.Children.Add(disp); Symbols.Items.Add(symbolGrid); } } catch (Exception ex) { Logger.Instance.LogError(ex); MessageBoxDialog.Show(ESRI.ArcGIS.Mapping.Controls.Resources.Strings.ErrorRetrievingSymbols + Environment.NewLine + ex.Message); } } }
private static void applyColorToSymbol(Symbol symbol, Color color) { if (symbol == null) { return; } FillSymbol fillSymbol = symbol as FillSymbol; if (fillSymbol != null) { byte currentAlpha = (byte)255; if (fillSymbol.Fill != null) { currentAlpha = (byte)(255 * fillSymbol.Fill.Opacity); // Preserve current opacity of symbol color } string colorHex = Color.FromArgb(currentAlpha, color.R, color.G, color.B).ToString(); Color newColor = ColorPickerUtils.FromHex(colorHex); if (fillSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleFillSymbol) { (fillSymbol as ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleFillSymbol).Color = newColor; } else { fillSymbol.Fill = new SolidColorBrush(newColor); } } else { LineSymbol lineSymbol = symbol as LineSymbol; if (lineSymbol != null) { byte currentAlpha = (byte)255; if (lineSymbol.Color != null) { currentAlpha = (byte)(255 * lineSymbol.Color.Opacity);// Preserve current opacity of symbol color } string colorHex = Color.FromArgb(currentAlpha, color.R, color.G, color.B).ToString(); Color newColor = ColorPickerUtils.FromHex(colorHex); lineSymbol.Color = new SolidColorBrush(newColor); } else { ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol markerSymbol = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol; if (markerSymbol != null) { byte currentAlpha = (byte)255; if (markerSymbol.Color != null) { currentAlpha = (byte)(255 * markerSymbol.Color.Opacity);// Preserve current opacity of symbol color } string colorHex = Color.FromArgb(currentAlpha, color.R, color.G, color.B).ToString(); Color newColor = ColorPickerUtils.FromHex(colorHex); markerSymbol.Color = new SolidColorBrush(newColor); } else { ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol simpleMarkerSymbol = symbol as ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol; if (simpleMarkerSymbol != null) { byte currentAlpha = (byte)255; if (simpleMarkerSymbol.Color != null) { currentAlpha = (byte)(255 * simpleMarkerSymbol.Color.Opacity);// Preserve current opacity of symbol color } string colorHex = Color.FromArgb(currentAlpha, color.R, color.G, color.B).ToString(); Color newColor = ColorPickerUtils.FromHex(colorHex); simpleMarkerSymbol.Color = new SolidColorBrush(newColor); } else { ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol sms = symbol as ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol; if (sms != null) { byte currentAlpha = (byte)255; if (sms.Color is SolidColorBrush) { currentAlpha = (sms.Color as SolidColorBrush).Color.A; } else if (sms.Color != null) { currentAlpha = (byte)(255 * sms.Color.Opacity);// Preserve current opacity of symbol color } string colorHex = Color.FromArgb(currentAlpha, color.R, color.G, color.B).ToString(); Color newColor = ColorPickerUtils.FromHex(colorHex); sms.Color = new SolidColorBrush(newColor); if (sms.OutlineColor != null) { sms.OutlineColor = new SolidColorBrush(newColor); } } } } } } }