元の回答
詳細は別のコンテナに入れる必要がありますか?あなたの例を誤解しているかもしれませんが、リストアイテムのアイテムテンプレートに詳細セクションを追加し、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
属性を使用してPopup
、がターゲット要素の右側に表示されるように指定し、PlacementTarget
プロパティをタイプの最初の祖先ListViewItem
(つまり親コンテナー)にバインドします。
これにより、次の例のような外観になります。
