【发布时间】:2019-06-05 21:57:29
【问题描述】:
问题(发生在绑定到 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,添加新项目并删除旧项目。这样,带有 SharedSizeGroup 的 RowDefinition 始终存在于可视化树中...
真的很烦人...我认为在这种情况下甚至不可能使用 SharedSizeGroup。
【问题讨论】: