gpt4 book ai didi

c# - 在其一侧显示 SelectedItem 详细信息

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:57 25 4
gpt4 key购买 nike

我有一个 ListView 绑定(bind)到 ObservableCollection<Foo> .选择 ListViewItem 时,我会在容器中显示 SelectedItem(Foo 成员)的详细信息。它工作正常。

现在我只想在 SelectedItem 旁边显示详细信息。即,如果我选择第四个 ListViewItem,则容器的顶部应该与 ListViewItem 的顶部相同。如果即使在滚动列表时也会产生任何问题,我将如何同步他们的位置。

P.S: 滚动条是隐藏的

这个问题还没有解决。有人可以帮忙吗?

最佳答案

原始答案

细节是否需要放在单独的容器中?我可能误解了你的例子,但我认为你可以通过将详细信息部分添加到列表项的项目模板然后根据 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 的右侧放置一个 Popup,它仅对所选项目可见:

<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 属性绑定(bind)到ListViewItem 类型的第一个祖先(即父容器)。

这会导致如下例所示的外观:

working example

关于c# - 在其一侧显示 SelectedItem 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com