ListView没有项目后丢失adorner层

时间:2014-11-03 10:30:13

标签: c# wpf gridview

我使用附加行为从此处向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,我猜它还没有渲染,也没有adorner层。但

问题是,如何抓住正确的时刻来重绘丢失的字形(或者当存在时获取adorner图层)?

1 个答案:

答案 0 :(得分:0)

我已将其整理出来,问题是,GridViewSort具有属性SortedColumnHeaderProperty,它持有对已排序列标题的引用。

因此,当列表被清除并再次填充时,会重新创建列标题,并且该引用不再用于渲染。