【问题标题】:How to bind maximum and minimum zoom levels in Bing Maps Silverlight如何在 Bing 地图 Silverlight 中绑定最大和最小缩放级别
【发布时间】:2010-09-24 14:36:50
【问题描述】:

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

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

但是,我找不到将滑块的最大和最小属性绑定到地图的最大和最小可用缩放级别的方法。我使用的是默认视图(道路、空中),没有自定义图块集或任何花哨的东西。

我尝试过这样的事情:

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 根据地图的中心位置而变化)。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我最终将一个 TargetViewChanged 处理程序放在一起作为创可贴,但我想这将是我的永久解决方案。最坏的情况是 Slider 没有像其他情况那样快速或准确地更新,我最终可能会缩小滚动条的末端。这还不错。
    【解决方案2】:

    如其他地方所述,您不能通过绑定来做到这一点,至少不能使用当前的 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2023-04-05
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      相关资源
      最近更新 更多