Как связать максимальный и минимальный уровни масштабирования в Bing Maps Silverlight - PullRequest
3 голосов
/ 24 сентября 2010

Я хотел бы реализовать пользовательский ползунок масштабирования для элемента управления Bing Maps в моем приложении silverlight.Я могу настроить его механику довольно простым способом:

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

Однако я не могу найти способ привязать свойства «Максимум» и «Минимум» ползунка к максимальному и минимальному доступному уровню масштабирования длякарта.Я использую виды по умолчанию (Road, Aerial) и никаких пользовательских наборов плиток или чего-то необычного.

Я пробовал что-то вроде этого:

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 голосов
/ 15 сентября 2011

Как указано в другом месте, вы не можете сделать это с помощью привязки, по крайней мере, не используя текущий 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();
0 голосов
/ 24 сентября 2010

Невозможно выполнить такое связывание, поскольку Mode не является свойством зависимости, а MapMode не является объектом зависимости. Ни одно из других свойств в цепочке, и при этом они не реализуют INotifyPropertyChanged. Так что связывание их в значительной степени обречено.

Вам понадобится код. Может случиться так, что событие Map * ModeChanged срабатывает при изменении диапазона, и в этом случае вы можете обновить Min / Max в точке.

Если не использовать одно из измененных представлений, например, TargetViewChanged или ViewChangeEnd.

...