我有ListBox
根据数据绑定项目模板从类中提供ItemsSource
。我想找到相对于ListBox.SelectedItem
的{{1}}位置。由于我使用了一个类来提供ListBox
,因此我无法将ItemsSource
(其类型为ListBox.SelectedItem
)投射到{ {1}}。 (相反,我应该将它转换为源类类型。)
有什么办法? -Thanks
详细信息:(任意)
有一个object
实现了ListBoxItem
,如此:
ListBox
Style
的用法如下:
<Style x:Key="MyListBoxStyle" TargetType="{x:Type ListBox}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border ...>
<StackPanel ...>
<Image Source="{Binding Path=ItemImageSource}" .../>
<TextBlock Text="{Binding Path=ItemTitle}" .../>
</StackPanel>
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
还有一个类支持ListBox
数据绑定信息:
<ListBox x:Name="MyListBox"
ItemsSource="{Binding}"
Style="{StaticResource ResourceKey=MyListBoxStyle}"/>
并提供MyListBox
:
internal class MyListBoxItemBinding
{
public string ItemTitle { get; set; }
public ImageSource ItemImageSource { get; set; }
}
现在,如何查找相对于MyListBox
的{{1}}位置?
答案 0 :(得分:3)
使用ItemsControl.ItemContainerGenerator
获取对ListBox
的项容器生成器的引用(这是为所有数据绑定对象创建包装器的对象)。
然后,使用ItemContainerGenerator.ContainerFromItem
方法获取代表所选UIElement
的{{1}}的引用。
最后,请参阅this question的答案,了解如何获取所选项目相对于ListBoxItem
的坐标。