Silverlight 4:ListBoxItem选择问题

时间:2011-04-21 03:04:21

标签: c# silverlight-4.0

我需要以编程方式在ListBox( SelectedMode = Multiple )控件中选择ListBoxItem的子集。

<Grid x:Name="LayoutRoot" Background="White">
    <ListBox Height="238" HorizontalAlignment="Left" Margin="26,41,0,0" Name="listBox1" VerticalAlignment="Top" Width="349" SelectionMode="Multiple" />
    <Button Content="Fill" Height="23" HorizontalAlignment="Left" Margin="26,12,0,0" Name="buttonFill" VerticalAlignment="Top" Width="75" Click="buttonFill_Click" />
    <Button Content="Randomly Select" Height="23" HorizontalAlignment="Left" Margin="116,12,0,0" Name="buttonSelectRandom" VerticalAlignment="Top" Width="104" Click="buttonSelectRandoml_Click" />
</Grid>


    private void buttonFill_Click(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i < 100; i++)
            listBox1.Items.Add(new ListBoxItem { Content = i.ToString()});
    }

    private void buttonSelectRandom_Click(object sender, RoutedEventArgs e)
    {
        var rand = new Random();

        foreach (ListBoxItem item in listBox1.Items)
            if (rand.Next(2)==1) item.IsSelected = true; 
    }

然而,当我运行代码时,似乎只有当前可见的项目显示(单击“填充”按钮,然后单击“随机选择”按钮)。滚动ListBox 显示没有选择其他ListBoxItems,即使在代码中检查其“IsSelected”状态将显示它们设置为“true”。

有趣的是,如果我首先手动滚动到ListBox的末尾(或部分方式),然后单击“随机选择”按钮,则ListBox将正确绘制所有选定的项目。我尝试了很多变通办法,但似乎无法找到一个有效的方法。这是一个错误吗?任何解决方法?

感谢您的帮助。

Jink

1 个答案:

答案 0 :(得分:3)

这可能是因为ListBox使用的是VirtualizingStackPanel。你能用普通的StackPanel测试吗?

    <ListBox>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>

修改

另一个解决方案是,而不是做item.IsSelected = true,你做

        foreach (int item in listBox1.Items)
        {
            if (rand.Next(2) == 1)
            {
                this.listBox1.SelectedItems.Add(item);
            }
        }

我测试了它并且它有效。 :)