原始答案
细节是否需要放在单独的容器中?我可能误解了您的示例,但我原以为您可以通过将详细信息部分添加到列表项的项模板中,然后根据IsSelected标志隐藏/显示它来实现所需的功能:
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel>
<ContentControl DockPanel.Dock="Right" Name="DetailsControl" Content="{Binding}" ContentTemplate="{StaticResource DetailsTemplate}" />
<TextBlock Text="{Binding}" />
</DockPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" Value="False">
<Setter TargetName="DetailsControl" Property="Visibility" Value="Hidden" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
即使您不完全关注这种行为,我想您也可以通过使用其他内容(例如弹出窗口)替换示例中的ContentControl来接近您想要的内容
根据评论编辑
下面的示例将放置一个
Popup
在车的右侧
ListView
仅对所选项目可见的:
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding}" />
<Popup Placement="Right"
PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
IsOpen="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}">
<Border Background="Black" Padding="3">
<TextBlock Text="{Binding}" />
</Border>
</Popup>
</DockPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Placement
属性指定
弹出窗口
应该出现在目标元素的右侧,并绑定
PlacementTarget
类型的第一个祖先的属性
ListViewItem
(即父容器)。
这会导致如下示例所示的外观: