2010-09-24 115 views
3

我想在我的Silverlight应用程序中为Bing地图控件实施自定义缩放滑块。我可以设置它的力学一个非常简单的方法:如何在Bing地图中绑定最大和最小缩放级别Silverlight

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

但是,我无法找到绑定的最高和最大和最小可用缩放级别的地图上的滑块的最低性能的方式。我正在使用默认视图(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(对于我现在正在查看的特定位置,Max取决于地图居中位置的变化)。

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

回答

0

您将无法像这样绑定,因为Mode不是依赖项属性,也不是MapMode依赖项对象。在这个链条中也没有任何其他的属性,也没有实施INotifyPropertyChanged。所以绑定这些几乎是注定要失败的。

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

未能使用视图更改事件之一如TargetViewChangedViewChangeEnd

+0

谢谢。我最初把一个TargetViewChanged处理器作为一个创可贴,但我想这将是我的永久解决方案。最糟糕的情况是滑块不会像其他情况那样快速或准确地更新,并且最终可能会缩小滚动条的末端。这并不算糟糕。 – Whiteknight 2010-09-24 19:34:55

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(); 
相关问题