/// <summary>
        /// Initialize hint.
        /// </summary>
        /// <param name="canvas">Canvas to show hint.</param>
        /// <param name="mapControl">Map control.</param>
        /// <param name="addressByPointTool">Reverse geocoding tool.</param>
        public void Initialize(Canvas canvas, MapControl mapControl, AddressByPointTool addressByPointTool)
        {
            Debug.Assert(canvas != null);
            Debug.Assert(mapControl != null);
            Debug.Assert(addressByPointTool != null);

            _canvas             = canvas;
            _mapControl         = mapControl;
            _addressByPointTool = addressByPointTool;

            // Subscribe to mouse events for dragging hint.
            canvas.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_PreviewMouseLeftButtonDown);
            canvas.PreviewMouseMove           += new MouseEventHandler(_PreviewMouseMove);
            canvas.PreviewMouseLeftButtonUp   += new MouseButtonEventHandler(_PreviewMouseLeftButtonUp);

            INotifyCollectionChanged selection = _mapControl.SelectedItems as INotifyCollectionChanged;

            selection.CollectionChanged += new NotifyCollectionChangedEventHandler(_SelectionCollectionChanged);
        }
        /// <summary>
        /// Init geocoding hint if map control from geocodable page.
        /// </summary>
        private void _InitGeocodingHint()
        {
            // Find address by point tool.
            AddressByPointTool addressByPointTool = null;

            foreach (IMapTool tool in _tools.Tools)
            {
                if (tool is AddressByPointTool)
                {
                    addressByPointTool = tool as AddressByPointTool;
                    break;
                }
            }

            if (addressByPointTool != null)
            {
                GeocodingHint.Initialize(canvas, this, addressByPointTool);
                _isGeocodingHintInitialized = true;
            }
        }