可重用的DataTemplate.如何指定?需要语法帮助

本文关键字:语法 帮助 何指定 DataTemplate | 更新日期: 2023-09-27 18:18:37

这是我的自定义DataTemplateSelector控件:

<m:Map x:Name="MainMap">
            <m:MapItemsControl 
                ItemsSource="{Binding Source={StaticResource WorkLayerData}}">
                <m:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Mobile:DevicePushpinTemplateSelector 
                            m:MapLayer.Position="{Binding Location}" 
                            ZoomLevel="{Binding ZoomLevel, ElementName=MainMap}" 
                            Content="{Binding}">
                            <Mobile:DevicePushpinTemplateSelector.DotTemplate>
                                <DataTemplate>
                                    <Ellipse Width="8" Height="8" Stroke="Black" Fill="{Binding IsGPSDataRecent, Converter={StaticResource BoolToGreenRedBrushConverter}}" StrokeThickness="1" /> 
                                </DataTemplate>
                            </Mobile:DevicePushpinTemplateSelector.DotTemplate>
                            <Mobile:DevicePushpinTemplateSelector.NumberedTemplate>
                                <DataTemplate>
                                    <Border x:Name="border" Background="{Binding IsGPSDataRecent, Converter={StaticResource BoolToGreenRedBrushConverter}}" BorderBrush="Black" BorderThickness="2" Padding="2" Height="20" CornerRadius="8">
                                        <TextBlock  VerticalAlignment="Center" Text="{Binding DisplayId}" />
                                    </Border>                                  
                                </DataTemplate>
                            </Mobile:DevicePushpinTemplateSelector.NumberedTemplate>
                            <Mobile:DevicePushpinTemplateSelector.DetailedTemplate>
                                <DataTemplate>  
                                    <Border Background="{Binding IsGPSDataRecent, Converter={StaticResource BoolToGreenRedBrushConverter}}" BorderBrush="Black" BorderThickness="1" Padding="2" CornerRadius="2">
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="Auto" />
                                                <RowDefinition Height="Auto" />
                                                <RowDefinition Height="Auto" />
                                                <RowDefinition Height="Auto" />
                                                <RowDefinition Height="Auto" />
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto" />
                                                <ColumnDefinition Width="Auto" />
                                            </Grid.ColumnDefinitions>
                                            <TextBlock  Text="Id:" FontWeight="Bold" />
                                            <TextBlock  Text="{Binding DisplayId}" Grid.Column="1" />
                                            <TextBlock  Text="Device Id:" FontWeight="Bold" Grid.Row="1" />
                                            <TextBlock  Text="{Binding DeviceId}" Grid.Row="1" Grid.Column="1" />
                                            <TextBlock  Text="Speed:" FontWeight="Bold" Grid.Row="2" />
                                            <TextBlock  Text="{Binding Speed}" Grid.Row="2" Grid.Column="1" />
                                            <TextBlock  Text="Location:" FontWeight="Bold" Grid.Row="3" />
                                            <TextBlock  Text="{Binding Location}" Grid.Row="3" Grid.Column="1" />
                                            <Button Content="View Details" Grid.Row="4" Grid.ColumnSpan="2" />
                                        </Grid>                                        
                                    </Border>
                                </DataTemplate>
                            </Mobile:DevicePushpinTemplateSelector.DetailedTemplate>
                        </Mobile:DevicePushpinTemplateSelector>
                    </DataTemplate>
                </m:MapItemsControl.ItemTemplate>
            </m:MapItemsControl>
        </m:Map>

我想把我的Mobile:DevicePushpinTemplateSelector.DetailedTemplate移到资源中,这样我就可以在其他地方重用它。

我声明了资源:

<UserControl.Resources>
        <DataTemplate x:Key="DetailedMapItemTemplate">
            <Border Background="{Binding IsGPSDataRecent, Converter={StaticResource BoolToGreenRedBrushConverter}}" BorderBrush="Black" BorderThickness="1" Padding="2" CornerRadius="2">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <TextBlock  Text="Id:" FontWeight="Bold" />
                    <TextBlock  Text="{Binding DisplayId}" Grid.Column="1" />
                    <TextBlock  Text="Device Id:" FontWeight="Bold" Grid.Row="1" />
                    <TextBlock  Text="{Binding DeviceId}" Grid.Row="1" Grid.Column="1" />
                    <TextBlock  Text="Speed:" FontWeight="Bold" Grid.Row="2" />
                    <TextBlock  Text="{Binding Speed}" Grid.Row="2" Grid.Column="1" />
                    <TextBlock  Text="Location:" FontWeight="Bold" Grid.Row="3" />
                    <TextBlock  Text="{Binding Location}" Grid.Row="3" Grid.Column="1" />
                    <Button Content="View Details" Grid.Row="4" Grid.ColumnSpan="2" />
                </Grid>
            </Border>
        </DataTemplate>
    </UserControl.Resources>

我的问题是,我不知道如何使用这个DataTemplate在我的选择器。我需要使用的XAML是什么?像ListBox这样的控件很容易,只需设置ItemTemplate="{StaticResource thisTemplate}",但我如何在我的情况下做到这一点?还在学习XAML

可重用的DataTemplate.如何指定?需要语法帮助

只需在标签本身设置DetailedTemplate属性:

<Mobile:DevicePushpinTemplateSelector
          m:MapLayer.Position="{Binding Location}" 
          ZoomLevel="{Binding ZoomLevel, ElementName=MainMap}" 
          Content="{Binding}"
          DetailedTemplate="{StaticResource DetailedMapItemTemplate}">
          ...