2010-09-24 59 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(); 
相關問題