在ListView没有项目后丢失装饰器层

本文关键字:ListView 项目 | 更新日期: 2023-09-27 18:28:49

我使用附加行为从这里向GridView列添加排序:http://www.thomaslevesque.com/2009/08/04/wpf-automatically-sort-a-gridview-continued/

如果我不使用以下代码,它工作得很好:

      <ListView.Style>
            <Style TargetType="ListView">
                <Style.Triggers>
                    <Trigger Property="HasItems" Value="False">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="ListView">
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.Style>

使用以下步骤序列出现问题:
1) 用项目填充列表,单击标题对其进行排序,排序图示符出现
2) 清除列表
3) 再次填充列表,排序图示符不可见

我在附加行为中订阅了SizeChanged事件,以捕捉列表从空变满的时刻,重新绘制排序图示符,但GetAdornerLayer(columnHeader)返回null,我想它还没有渲染,也没有装饰层。

问题是,如何抓住时机重新绘制缺失的字形(或者获得装饰层,如果它存在的话)?

在ListView没有项目后丢失装饰器层

我已经对它进行了排序,问题是GridViewSort具有属性SortedColumnHeaderProperty,该属性包含对排序列标题的引用。

所以,当列表被清除并再次填充时,列标题被重新创建,并且在渲染中不再使用该引用。