Wpf 列表框在ItemsPanel中获取SelectedItem

Wpf 列表框在ItemsPanel中获取SelectedItem,wpf,listbox,stackpanel,itemspanel,Wpf,Listbox,Stackpanel,Itemspanel,我有一个带有自定义stackpanel的列表框(现在只是一个扩展了stackpanel的类,但我希望在这里做一些动画)作为它的itemspanel。现在,当选择发生变化时,我想在最后一个选定项和当前选定项之间制作一些漂亮的动画 现在我的问题是如何在itemspanel中获取所选项目 这就是我定义itemspanel的方式 <ItemsPanelTemplate> <l:CustomStackPanel SelectedItem="{Bin

我有一个带有自定义stackpanel的列表框(现在只是一个扩展了stackpanel的类,但我希望在这里做一些动画)作为它的itemspanel。现在,当选择发生变化时,我想在最后一个选定项和当前选定项之间制作一些漂亮的动画

现在我的问题是如何在itemspanel中获取所选项目

这就是我定义itemspanel的方式

<ItemsPanelTemplate>
                    <l:CustomStackPanel SelectedItem="{Binding SelectedItem,ElementName=listbox}"  IsItemsHost="True" Orientation="Vertical"/>
                </ItemsPanelTemplate>
我想我可以简单地将列表框中的selectedItem绑定到stackpanel中的selectedItem。但这种方法根本不起作用


另一个想法是覆盖stackpanel上的previewmousedown,并从stackpanel的子项中找到相应的项。但我也不知道如何找到这个项目

在绑定中使用RelativeSource

<ItemsPanelTemplate>
     <l:CustomStackPanel SelectedItem="{Binding SelectedItem,RelativeSource={RelativeSource FindAncestor, AncestorType=x:Type ListBox}}"  IsItemsHost="True" Orientation="Vertical"/>
 </ItemsPanelTemplate>


如果使用绑定,则
SelectedItem
将不是
UIElement
类型,而是绑定列表项类型<代码>选择器。SelectedItem属于对象类型。是否要
ListBoxItem
?是,我要ListBoxItem。我的意图是“点亮”当前和以前选择的项目之间的项目(如在选择更改时创建动画路径)。由于stackpanel的子项属于UIElement集合,因此我认为所选项目应为UIElement类型?绑定项目包装在
ListBoxItem
中以显示,但
SelectedItem
保留绑定列表项目类型。您可以使用感谢从
SelectedItem
获取
ListBoxItem
。我认为这为我指明了正确的方向。你认为我可以用这种方法实现动画效果吗?我需要获取上一个选定项目的索引和当前选定项目的索引。我需要设置这两个项目之间的所有项目的动画。我不认为你可以实现你想要的-在这两个项目之间点亮项目-在纯XAML中,但在代码中它是可行的。编辑-实际上,只要我将我的类型从UIElement更改为我的实际类型(即ItemViewModel),它就可以工作。但是我需要它作为stackpanel的Children集合中的UIElement,这样我就可以制作一些动画了(您无法使用binding获取UIelement。。正如@dkozl所建议的,一旦您按照我的建议获取selecteditem,您就必须使用ItemContainerGenerator
<ItemsPanelTemplate>
     <l:CustomStackPanel SelectedItem="{Binding SelectedItem,RelativeSource={RelativeSource FindAncestor, AncestorType=x:Type ListBox}}"  IsItemsHost="True" Orientation="Vertical"/>
 </ItemsPanelTemplate>