如何找到数据绑定的ListBoxItem位置?

时间:2011-09-20 06:59:36

标签: c# wpf

我有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}}位置?

1 个答案:

答案 0 :(得分:3)

使用ItemsControl.ItemContainerGenerator获取对ListBox的项容器生成器的引用(这是为所有数据绑定对象创建包装器的对象)。

然后,使用ItemContainerGenerator.ContainerFromItem方法获取代表所选UIElement的{​​{1}}的引用。

最后,请参阅this question的答案,了解如何获取所选项目相对于ListBoxItem的坐标。