问题(在切换列表绑定到ItemsSource时发生-当具有SharedSizeGroup的行消失一会儿时):
所以我有一个Grid
和一个IsSharedSizeScope="True"
。我正在构建的控件是日历/日程表控件。
我有一个TimeRuler
控件,需要将其与标题对齐(下面的屏幕快照中的橙色矩形)。我为此使用SharedSizeGroup。问题是SharedSizeGroup
位于ItemsControl
的生成项目内部,这会引起一些奇怪的延迟,如在gif中可以看到的。
是否在 之后重新渲染它?ItemsContainerGenerator渲染第一个项目或完成加载?
引起问题的代码段
<!-- to even time ruler out -->
<Grid
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,-1,0,0">
<Grid.RowDefinitions>
<!-- both SuperHeader and LocationHeader are rendered later and this is causing this weird flickering/jumping -->
<RowDefinition SharedSizeGroup="SuperHeader" />
<RowDefinition SharedSizeGroup="LocationHeader" />
</Grid.RowDefinitions>
</Grid>
视觉树或多或少:
这可以通过使这些高度固定而不使用SharedSizeGroup来解决,但是它不再那么灵活...
或者确保ItemsControl永远不会为空,例如使用ObservableCollection,添加新项目,然后删除旧项目。这样,具有共享大小组的RowDefinition总是出现在可视树中...
真的很烦...我认为在这种情况下甚至不可能使用SharedSizeGroup。
答案 0 :(得分:0)
替换绑定到ItemsSource
的集合从未像我想要的那样快。两者都没有清除和添加项目。这导致所有内容重新渲染,并且速度很慢。
因为找不到更好的解决方案,所以我只添加(填充)日用品一次,然后使用items[i]
语法替换它们。这样,您不必在每次要显示不同日期范围时都完全重新渲染UI。