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