在另一个DataTemplate中使用DataTemplate?

时间:2012-12-11 03:28:49

标签: silverlight xaml silverlight-5.0

我在视图上有2个列表,我希望它们共享相同的DataTemplate。

第一个列表可以直接使用此DataTemplate,第二个列表需要在特定条件下使用它,所以在第一种情况下我有这样的XAML并且它可以工作:

<ListBox ItemTemplate="{StaticResource TrackedAssetTemplate}">

在第二种情况下,我有类似的东西,但不能使它工作..

<m:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Canvas
                            m:MapLayer.Position="{Binding Location}">
                            <Button
                                Visibility="{Binding IsSelected, Converter={StaticResource BoolToReverseVisibilityConverter}}"
                                Width="{Binding PushpinWidth}" Height="{Binding PushpinWidth}"
                                Style="{StaticResource LooklessButtonStyle}"
                                Command="{Binding DataContext.SelectedPushpinChangedCommand, ElementName=LayoutRoot}"
                                CommandParameter="{Binding}"
                                Cursor="Hand">
                                <Ellipse
                                Width="{Binding PushpinWidth}" Height="{Binding PushpinWidth}" Stroke="Black" Fill="{Binding IsGPSDataRecent, Converter={StaticResource BoolToGreenRedBrushConverter}}" StrokeThickness="1">
                                    <ToolTipService.ToolTip>
                                        <TextBlock Text="{Binding DeviceId}" />
                                    </ToolTipService.ToolTip>
                                </Ellipse>
                            </Button>
                          <ContentControl
Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisibilityConverter}}"                                 
DataTemplate="{StaticResource TrackedAssetTemplate}" />

所以,我的想法是第一个lisbox有直板模板。在地图上选择项目时我可以使用相同的数据模板,否则我会显示按钮。我试图在ContentControl内的地图上包装模板,但它没有用。

那么,问题是如何在datatemplate中包装数据模板?

2 个答案:

答案 0 :(得分:0)

我认为你不需要在其他内部使用一个datatemplate。您可以设置项目的样式以使用触发器更改项目的datatemplate。像

这样的东西
 <Style x:Key="ContentPresenterStyle"
           TargetType="{x:Type ContentPresenter}" >
        <Setter Property="ContentTemplate"
                        Value="{StaticResource DefaultStyleTemplate}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsSelected, ,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MapListBoxItem}}}"  Value="False">
                <Setter Property="ContentTemplate"
                        Value="{StaticResource TrackedAssetTemplate}" />
            </DataTrigger>
        </Style.Triggers>
</Style>

希望有所帮助......

答案 1 :(得分:0)

您可能错过了将内部ContentControl的内容绑定到数据上下文。

<ContentControl Content={Binding .}
    Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisibilityConverter}}" 
    DataTemplate="{StaticResource TrackedAssetTemplate}" />