我在视图上有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中包装数据模板?
答案 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}" />