How to bind maximum and minimum zoom levels in Bing Maps Silverlight

安稳与你 提交于 2019-12-07 15:42:44

问题


I would like to implement a custom zoom slider for a Bing Maps control in my silverlight application. I can set up the mechanics of it in a pretty straightforward way:

<Slider ... Value="{Binding ZoomLevel, Mode=TwoWay, ElementName=MyMap}"/>

However, I can't find a way to bind the Maximum and Minimum properties of the Slider to the maximum and minimum available zoomlevel for the map. I am using the default views (Road, Aerial) and no custom tilesets or anything fancy.

I've tried something like this:

Maximum="{Binding Path=Map.Mode.ZoomRange.To, Mode=TwoWay}"
Minimum="{Binding Path=Map.Mode.ZoomRange.From, Mode=TwoWay}"

But that doesn't work. When my map loads, the Minimum value is set to 0.0, and the Maximum value is set to 1.0. The actual values of Map.Mode.ZoomRange are 1.0 and 17.0 (for the particular location I am looking at now. The Max changes depending on where the map is centered).

How can I bind these properties to my new custom slider?


回答1:


You won't be able to bind like this because Mode is not a dependency property nor is MapMode a dependency object. Neither are any of the other properties in the chain nor do they implement INotifyPropertyChanged. So binding these is pretty much doomed.

You will need some code. It might be that the Map's ModeChanged event fires when the range is changed, in which case you can update the the Min/Max at the point.

Failing that use one of the view changed events like TargetViewChanged or ViewChangeEnd.




回答2:


As stated elsewhere, you can't do this via binding, at least not using the current API.

The following code will do the trick. Pop it just after your InitializeComponent(); statement.

Action updateSliderRange = () =>
    {
        _slider.Minimum = _map.Mode.ZoomRange.From;
        _slider.Maximum = _map.Mode.ZoomRange.To;
    };
_map.ModeChanged += delegate { updateSliderRange(); };
_map.TargetViewChanged += delegate { updateSliderRange(); };
updateSliderRange();


来源:https://stackoverflow.com/questions/3788119/how-to-bind-maximum-and-minimum-zoom-levels-in-bing-maps-silverlight

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!