ItemContainerGenerator返回null,为什么?

时间:2012-01-19 20:07:25

标签: c# wpf xaml

<ListBox BorderThickness="0" x:Name="PendingChatListBox" HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate >
        <DataTemplate>
            <Button Height="40" Click="OpenChat_click" Content="{Binding BindsDirectlyToSource=True, Converter={StaticResource cPendingUnreadMessagesConverter}}"  HorizontalContentAlignment="Center" Background="Transparent" x:Name="OpenChatButton" Foreground="Blue"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
ObservableCollection<SideBarUnit> OpenChats = new ObservableCollection<SideBarUnit>();
this.PendingChatListBox.ItemsSource = OpenChats;


if (PendingChatListBox.Items.Count > 0)
{
    // WHY IS THIS OBJECT NULL?
    object obj = PendingChatListBox.ItemContainerGenerator.ContainerFromItem(PendingChatListBox.Items[0]); 
}

1 个答案:

答案 0 :(得分:3)

可能是因为虚拟化,视图外的项目没有为它们生成容器(如果项目面板本质上是虚拟化的; ListBoxes的默认值等)。

或者,如果您指定一个源并尝试以相同的方法获取容器,则ListBox没有时间创建它。 UI线程必须空闲才能这样做。