在长列表框中更改不透明度会使最后一个元素消失

时间:2011-05-20 08:46:36

标签: silverlight windows-phone-7

我创建了一个列表框,其中Opacity设置为小于1的值,当我绑定一个长列表时,最后一个元素消失。

我创建了一个小样本来重现问题

在XAML中,列表框:

<ListBox x:Name="mainList" ItemsSource="{Binding}" Opacity="0.5"></ListBox>

并且它有一个很长的列表:

   public MainPage()
    {
        InitializeComponent();
        List<int> l = new List<int>();
        for (int i = 0; i < 100; i++)
        {
            l.Add(i);
        }

        this.DataContext = l;
    }

当我执行它时,我看到的最后一个元素是“87”,底部有其他元素的位置,但它完全是黑色。

究竟是什么问题?

编辑:一位同事告诉我这可能是虚拟化的一个问题,因为问题发生在87,我们在屏幕上可以看到29个项目(列表框虚拟化显示的项目数量的3倍,3 * 29 = 87)。 我使用ItemsControl(没有虚拟化)进行了相同的测试,问题是一样的。

1 个答案:

答案 0 :(得分:1)

*编辑 - 我能够重现你的问题 - 有一件事不会产生完全相同的UI,但是工作和看起来相似,是将ListBox不透明度设置为1,然后将DataTemplate中的UI元素设置为不透明度0.5。

代码:

        <ListBox x:Name="mainList" ItemsSource="{Binding}" Opacity="1">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Opacity="0.5" Text="{Binding}">

                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>