开发者

Bing Maps Silverlight - Adding tooltips to pins generated in C#

I am attempting to convert a bing map implementation that uses standard PushPins in order to populate the map, but I need to add a tooltip to each pin. I found some options of how to do this on the website but the issue is I need the pushpins to be different from each other in a way that is dynamic. Based on the properties of each pin it must have a different background color.

The code already on this site all has the programmer use an image of the pushpin when they customize it.

So right now I need a way to either create a templated pushpin that is able to maintain the look and properties of a pushpin (so I can set background), while allowing a tooltip. Or instead having a regular pushpin have a tooltip or popup with it.

Any help would be appreciated!

Edited:

Control Template I am using

<ControlTemplate x:Key="NewPins" >

        <Grid x:Name="pushPin" >

            <Popup IsOpen="False" behaviors:RolloverPopup.HideDelay="0" behaviors:RolloverPopup.Target="{Binding ElementName=pushPin}"  Margin="30,-20,0,0"  >
                <Border Background="White" BorderBrush="Black" CornerRadius="10" BorderThickness="1">
                    <StackPanel Orientation="Vertical" >
                        <TextBlock Text="{Binding Title}" Foreground="Black" FontWeight="Bold" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                        <TextBlock Text="{Binding Content}" Foreground="Black" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                    </StackPanel>
                </Border>
            </Popup>
        </Grid>

    </ControlTemplate>

This is setting up the pin in C#

Pushpin pin = new Pushpin() 
                    { 
                        Location = new Location( Double.Parse(item.PinLat), Double.Parse(item.PinLong)),
            开发者_如何转开发            Content=String.Concat( GetNewlineString(item.LocationName), GetNewlineString(item.CallerName), GetNewlineString(item.PhoneNumber)),
                        Template=(ControlTemplate)Application.Current.Resources["NewPins"],
                        Width = 50,
                        Height = 65,
                    };

And this is creating the Bing Map

<c:BingMapAdSmart 
         AnimationLevel="UserInput"
         Pins="{Binding DashboardViewModel.MapPins}" 
         NavigationVisibility="Visible"
         SetViewZoomFactor="0"
         MaxZoomLevel="7"
         Visibility="{Binding NavViewModel.IsViewTransitioning, Converter={StaticResource TrueToCollapsedConverter}}" />


I may not really understand your question correctly, but i assume you need pushpins that are being created dynamically based on a template right? And you want to be able to change the tooltip (content property i assume) independently.

If thats the case, first you need to put a template resource to your resources in xaml;

   <phone:PhoneApplicationPage.Resources>
       <ControlTemplate x:Key="template_name" TargetType="m:Pushpin">
            ...this is your design part you can compile this xaml via Expression
       </ControlTemplate>
   </phone:PhoneApplicationPage.Resources>

then you'll need pass this value to every pushpin you've created dynamically codebehind. On this stage you can also set their content property, since they don't have a notification property, i don't know if you mean this but content property is the similar one. You can edit them like you edit other stuff;

   myPushPin.template = (ControlTemplate)This.Resources["template_name"];
   myPushPin.Content = "Hello World!";

This stage may differ according where you put your resources if its in phone:PhoneApplicationPage.Resources

if you put in Application.Resources use this;

   myPushPin.template = (ControlTemplate)Application.Current.Resources["template_name"];
   myPushPin.Content = "Hello World!";

This should work, i don't have bing maps API or WP7 tools installed on this computer so i can't test it but this should be ok.

Happy coding!


Edit: So if you want to change the background of a pushpin you don't have to hold back, it doesn't matter whether it has a control template or not. Actually every control has one as default. You can change the background as you always do

   myPushpin.Background = new SolidColorBrush(Colors.Blue);


I have done exactly what you describe. The way i did this makes the most sense to me. Here is what I did:

  • I created a custom Pushpin (i.e. UserControl). This Xaml defines my custom pushpin. It assumes this pushpin is to be data-bound to. One of the binded properties is background Color. This will easily satisfy your dynamic color issue.
  • In the bing map control i defined the following:

  • The MyPushpinTemplate is defined in the UserControl.Resources like this:

MyPushpinControl is the UserControl.

  • I also have a data model class (that implements INotifyPropertyChanged). This class is bound to an instance of MyPushpinControl. this data model class has all the properties and is data-binded to the UserControl.

This is technically all you need to know. To satisfy your tooltip issue, I simply added a tooltip to one of the panels within my custom pushpin. Simple as that.


Until I have a better solution I have decided the only thing I can think to do is to create a number of different pins to use. I don't need an infinite color solution so about 15 different pins should do the trick. Messy but it will work.


I just solved this issue to my complete satisfaction. To accomplish this, you need to have to create a Pushpin style with a key. Then inside this pushpin you create a standard pushpin (you can use another style on that but don't let it look back to this style, I used default), and a popup to go along with it. An example is below, I am using a local tool to do easy rollover popups, otherwise its standard stuff + bind maps.

<Style TargetType="bingMaps:Pushpin" x:Key="NewPins2">

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate  TargetType="bingMaps:Pushpin" >

                <Grid x:Name="pushPin" >
                    <Border  Width="50" Height="65" >
                        <bingMaps:Pushpin Background="{TemplateBinding Background}" />
                    </Border>

                    <Popup IsOpen="False" behaviors:RolloverPopup.HideDelay="0" behaviors:RolloverPopup.Target="{Binding ElementName=pushPin}"  Margin="30,-20,0,0"  >
                        <Border Background="White" BorderBrush="Black" CornerRadius="10" BorderThickness="1">
                            <StackPanel Orientation="Vertical" >
                                <TextBlock Text="{Binding Title}" Foreground="Black" FontWeight="Bold" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                                <TextBlock Text="{Binding Content}" Foreground="Black" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                            </StackPanel>
                        </Border>
                    </Popup>
                </Grid>

            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜