原来的答案
是否细节需要在一个单独的容器?我可能会误解你的榜样,但是我还以为你能达到你想要加入的细节部分的项目模板列表项,然后隐藏/显示它的基础上的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
类型的第一个祖先(即父容器)。
这导致如下面的例子的外观:
@Steve Greatrex:这将增加的ListViewItem的高度也,当我选择它。这就是为什么我把细节放在ListView之外的另一个容器中。 – Amsakanna 2010-06-25 06:49:53
在这种情况下,您是否可以将额外的内容放入Popup中,并在DataTrigger中设置Popup.IsOpen属性?这样,您可以在不影响高度的情况下,相对于ListViewItem或多或少地调整Popup的位置。唯一的缺点是,它可能会掩盖其他内容... – 2010-06-25 10:24:35
@Steve Greatrex:伟大的提示!弹出。感谢那。 – Amsakanna 2010-07-14 09:25:52