我想在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(对于我现在正在查看的特定位置。最大值根据地图居中的位置而变化。)
如何将这些属性绑定到我的新自定义滑块?
答案 0 :(得分:0)
您将无法像这样绑定,因为Mode
不是依赖项属性,MapMode
也不是依赖项对象。链中的任何其他属性都没有,也没有实现INotifyPropertyChanged
。因此绑定这些是非常注定的。
您需要一些代码。可能是当范围发生变化时,Map的ModeChanged
事件会触发,在这种情况下,您可以更新该点的最小值/最大值。
没有使用其中一个视图已更改的事件,例如TargetViewChanged
或ViewChangeEnd
。
答案 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();