自定义图钉和模板图像

时间:2011-09-14 14:57:44

标签: xaml windows-phone-7 bing-maps

这可能很简单,但此刻我正在撕裂我的头发。

我想在模型的地图上显示图钉。所以我为图钉创建了一个模板

<ControlTemplate x:Key="PushpinTemplate" TargetType="m:Pushpin">
    <Grid x:Name="ContentGrid" Width="32" Height="32" Margin="0">
        <Image Source="Resources/Pushpins/img.png" Stretch="Fill"/>
    </Grid>
</ControlTemplate>

然后将其用于绑定集合,如下所示:

<m:MapLayer x:Name="myPushpinLayer">
    <m:MapItemsControl x:Name="myPushpins" ItemsSource="{Binding PushpinCollection}">
        <m:MapItemsControl.ItemTemplate>
            <DataTemplate>
                <m:Pushpin Location="{Binding Location}" Template="{StaticResource PushpinTemplate}" />
            </DataTemplate>
        </m:MapItemsControl.ItemTemplate>
     </m:MapItemsControl>
</m:MapLayer>

但我想要做的是通过绑定更改图像源,但我不确定如何进行此操作。我打算做的是使用转换器根据集合中的id改变图像,如果这改变了最好的方法。

编辑:

我还有一点:

<m:MapLayer x:Name="myPushpinLayer">
    <m:MapItemsControl x:Name="myPushpins" ItemsSource="{Binding PushpinCollection}">
        <m:MapItemsControl.ItemTemplate>
            <DataTemplate>
                <m:Pushpin Location="{Binding Location}"/>
                    <m:Pushpin.Template>
                        <ControlTemplate>
                            <Grid x:Name="ContentGrid" Width="32" Height="32" Margin="0">
                            <Image Source="{Binding Type,Converter={StaticResource ImageConverter}}" Stretch="Fill"/>
                            </Grid>
                        </ControlTemplate>
                    </m:Pushpin.Template>
                </m:Pushpin>
            </DataTemplate>
        </m:MapItemsControl.ItemTemplate>
     </m:MapItemsControl>
</m:MapLayer>

如果我将图钉模板移动到</phone:PhoneApplicationPage.Resources>部分,则会失败。我不知道为什么。我想现在我正试图掌握我对这一切是如何运作的理解

1 个答案:

答案 0 :(得分:2)

只需将绑定添加到ControlTemplate

即可
<ControlTemplate x:Key="PushpinTemplate" TargetType="m:Pushpin">
    <Grid x:Name="ContentGrid" Width="32" Height="32" Margin="0">
        <Image Source="{Binding ImageUri}" Stretch="Fill"/>
    </Grid>
</ControlTemplate>

我建议使用ImageUri(类型为Uri)属性来反映要显示的图像,而不是使用转换器。但是转换器也可以工作,绑定也以相同的方式完成。