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但它没有用。

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

4

2 回答 2

0

我认为您不需要在其他数据模板中使用一个数据模板。您可以设置项目的样式以使用触发器来更改项目的数据模板。就像是

 <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>

希望能帮助到你..

于 2012-12-11T04:55:51.587 回答
0

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

<ContentControl Content={Binding .}
    Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisibilityConverter}}" 
    DataTemplate="{StaticResource TrackedAssetTemplate}" />
于 2012-12-11T13:36:26.207 回答