Проблемы с масштабированием кнопок управления Silverlight - PullRequest
3 голосов
/ 06 апреля 2010

В основном моя проблема в том, что я адаптировал фрагмент кода, найденный здесь

http://social.msdn.microsoft.com/Forums/en-US/vemapcontroldev/thread/62e70670-f306-4bb7-8684-549979af91c1

, который делает именно то, что я хочу, то есть масштабирую некоторые изображения кнопок в соответствии с уровнем масштабирования карты. Единственная проблема заключается в том, что я адаптировал этот код для запуска с управлением Silverlight на картах Bing (а не на виртуальной земле, как в исходном примере), и теперь корректность масштабирования изображений, но они перемещаются и достигают желаемой позиции только при моем уровне масштабирования это максимум. Есть идеи почему? Помощь будет принята с благодарностью:)

Модифицированный код ниже:

var layer = new MapLayer();
map.AddChild(layer);

//Sydney
layer.AddChild(new Pin
{
    ImageSource = new BitmapImage(new Uri("pin.png", UriKind.Relative)),
    MapInstance = map
}, new Location(-33.86643, 151.2062), PositionMethod.Center);

становится чем-то вроде

layer.AddChild(new Pin
{
    ImageSource = new BitmapImage(new Uri("pin.png", UriKind.Relative)),
    MapInstance = map
}, new Location(-33.92485, 18.43883), PositionOrigin.BottomCenter);

Я предполагаю, что это как-то связано с тем, как bing-карты привязывают свои элементы UI. Подробности об этом также очень полезны. Спасибо!

Ответы [ 3 ]

1 голос
/ 06 апреля 2010

Благодаря реакции Earthware мне удалось решить мою проблему. Это просто вопрос добавления директивы изображения (без использования класса канцелярской кнопки), добавления к нему фиксированного размера и соответствующей настройки свойств масштабирования CenterX и CenterY. Пример кода:

image.Source = new BitmapImage(new Uri("pin.png", UriKind.Relative));
image.Stretch = System.Windows.Media.Stretch.None;
image.Height = 152;
image.Width = 116;

layer.AddChild(image, new Location(-33.86643, 151.2062), PositionOrigin.BottomCenter);
image.RenderTransform = scaleTr;

scaleTr.CenterX = image.Width / 2; //image is alligned bottom center (see above)
scaleTr.CenterY = image.Height;
1 голос
/ 06 апреля 2010

попробуйте добавить собственный битовый образ фиксированного размера на карту, а не использовать класс метки

0 голосов
/ 04 июня 2010

Вот пример, который показывает, как автоматически масштабировать защелки с помощью ZoomLevel карты с использованием объекта Pushpin (вместо объекта Image) и сохраняет их в правильном месте. Все с небольшой помощью пользовательского IValueConverter, ScaleTransform и небольшого связывания данных.

http://pietschsoft.com/post/2010/06/04/Resizing-and-Auto-Scaling-Pushpin-in-Bing-Maps-Silverlight.aspx

...