如何在Bing Maps Silverlight中绑定最大和最小缩放级别

时间:2010-09-24 14:36:51

标签: .net silverlight silverlight-4.0 bing-maps

我想在silverlight应用程序中为Bing Maps控件实现自定义缩放滑块。我可以用一种非常简单的方式设置它的机制:

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

但是,我找不到将Slider的Maximum和Minimum属性绑定到地图的最大和最小可用缩放级别的方法。我使用的是默认视图(Road,Aerial),没有自定义tilesets或任何花哨的东西。

我尝试过这样的事情:

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

但这不起作用。加载我的地​​图时,最小值设置为0.0,最大值设置为1.0。 Map.Mode.ZoomRange的实际值是1.0和17.0(对于我现在正在查看的特定位置。最大值根据地图居中的位置而变化。)

如何将这些属性绑定到我的新自定义滑块?

2 个答案:

答案 0 :(得分:0)

您将无法像这样绑定,因为Mode不是依赖项属性,MapMode也不是依赖项对象。链中的任何其他属性都没有,也没有实现INotifyPropertyChanged。因此绑定这些是非常注定的。

您需要一些代码。可能是当范围发生变化时,Map的ModeChanged事件会触发,在这种情况下,您可以更新该点的最小值/最大值。

没有使用其中一个视图已更改的事件,例如TargetViewChangedViewChangeEnd

答案 1 :(得分:0)

如其他地方所述,你不能通过绑定来做到这一点,至少不使用当前的API。

以下代码可以解决问题。在你的InitializeComponent();声明之后弹出它。

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