WP7 Bing Map Pushpin — как настроить местоположение пользовательской канцелярской кнопки?

Хорошо, простой вопрос, но я еще не нашел очевидно простого ответа! У меня есть приложение для Windows Phone 7 с интеграцией карт и набором кнопок на карте. Канцелярская кнопка нестандартная (просто эллипс/круг).

К сожалению, местоположение пользовательской канцелярской кнопки «отключено» от геолокации. когда вы увеличиваете масштаб, он становится все ближе и ближе к точному и является самым дальним на самом уменьшенном уровне.

Я думаю, что это проблема смещения. Я посмотрел на RenderTransformOnOrigin, но он мне не помог.

Заранее спасибо, вот соответствующий код:

<phone:PhoneApplicationPage.Resources>
    <ControlTemplate x:Key="PushpinControlTemplateBlue" TargetType="my2:Pushpin">
        <Grid x:Name="ContentGrid" Width="34" Height="34" RenderTransformOrigin="0.5,0.5">
            <StackPanel Orientation="Vertical" >
                <Grid MinHeight="31" MinWidth="29" Margin="0">
                    <Ellipse Fill="Blue"
                            Margin="1"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Width="20"
                            Height="20"
                            Stroke="White"
                            StrokeThickness="3" />
                    <ContentPresenter HorizontalAlignment="Center"
                                Content="{TemplateBinding Content}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                Margin="4"/>
                </Grid>
            </StackPanel>
        </Grid>
    </ControlTemplate>
</phone:PhoneApplicationPage.Resources>


    <my1:Map Canvas.Left="16" Canvas.Top="13" CopyrightVisibility="Collapsed" CredentialsProvider="AtqOU-L_liZekzqR0mEG7dGDwswKnnXSoSmsVs6eGtAe7S9NZDiAtpAd1vgPfhxD" Height="521" LogoVisibility="Collapsed" Name="mapMain" ScaleVisibility="Collapsed" VerticalContentAlignment="Top" Visibility="Visible" Width="446" ZoomBarVisibility="Collapsed" BorderThickness="1" Background="Tomato">
        <my2:Pushpin Name="pin1"
                 Location="51.461326390697344, -0.9261151403188705"
                 Content=""
                 Template="{StaticResource PushpinControlTemplateBlue}" />
    </my1:Map>

person pearcewg    schedule 14.01.2011    source источник


Ответы (1)


Класс PushPin имеет свойство PositionOrigin, которое указывает, где точка местоположения находится относительно визуального представления вывода.

Стиль по умолчанию использует «BottomLeft» из-за его формы, у него есть галочка, направляющаяся к точке в его нижнем левом конце.

Однако вы используете круг, поэтому вам нужно переместить PositionOrigin в центр. Я бы также порекомендовал вам использовать стиль, а не просто шаблон для «стилизации» вашей канцелярской кнопки:

    <ControlTemplate x:Key="PushpinControlTemplate" TargetType="my2:Pushpin">
        <Grid x:Name="ContentGrid" Width="34" Height="34" RenderTransformOrigin="0.5,0.5">
            <StackPanel Orientation="Vertical" >
                <Grid MinHeight="31" MinWidth="29" Margin="0">
                    <Ellipse Fill="{TemplateBinding Background}"
                            Margin="1"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Width="20"
                            Height="20"
                            Stroke="{TemplateBinding Foreground}"
                            StrokeThickness="3" />
                    <ContentPresenter HorizontalAlignment="Center"
                                Content="{TemplateBinding Content}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                Margin="4"/>
                </Grid>
            </StackPanel>
        </Grid>
    </ControlTemplate>

<Style TargetType="my2:Pushpin" x:Key="PushpinControlTemplateBlue">
    <Setter Property="Template" Value="{StaticResource PushpinControlTemplate}" />
    <Setter Property="PositionOrigin" Value="Center" />
    <Setter Property="Background" Value="Blue" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="FontSize" Value="18" />
</Style>

Теперь ваш Xaml становится: -

 <my2:Pushpin Name="pin1"
             Location="51.461326390697344, -0.9261151403188705"
             Content=""
             Style="{StaticResource PushpinControlTemplateBlue}" />
person AnthonyWJones    schedule 14.01.2011
comment
Хорошо, это чрезвычайно впечатляющий ответ. Спасибо, и молодец. - person pearcewg; 15.01.2011