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

发布于 2024-11-08 14:49:06 字数 693 浏览 0 评论 0原文

我创建了一个列表框,其不透明度设置为小于 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 (没有虚拟化)进行了相同的测试,问题是相同的。

I created a listbox with an Opacity set to a value less than 1, and when I bind a long list, the last elements disappear.

I created a little sample to reproduce the problem

In the XAML, a listbox :

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

and it is bound to a long list :

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

        this.DataContext = l;
    }

When I execute it, the last element I see is the "87", there is the place for the others elements in the bottom, but it is completely black.

What is the problem exactly ?

edit: a colleague told me it is probably a problem with virtualization, as the problem happens at the 87, and we have 29 items visible on the screen (the listbox virtualizes 3 times the number of items shown, 3*29 = 87).
I made the same test with an ItemsControl (without virtualization), and the problem is the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

羅雙樹 2024-11-15 14:49:06

*编辑 - 我能够重现您的问题 - 有一件事不会产生完全相同的 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>

*Edit - I was able to reproduce your issue - one thing that does not produce exactly the same UI, but works and looks similar, is setting the ListBox opacity to 1, and then set the UI element in the DataTemplate to opacity 0.5.

Code:

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

                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文