【问题标题】:SharedSizeGroup weird jumping/flickering when SharedSizeGroup is inside ItemsControl generated items当 SharedSizeGroup 在 ItemsControl 生成的项目中时,SharedSizeGroup 奇怪的跳跃/闪烁
【发布时间】:2019-06-05 21:57:29
【问题描述】:

问题(发生在绑定到 ItemsSource 的切换列表时 - 当 SharedSizeGroup 的行消失片刻时):

所以我有一个GridIsSharedSizeScope="True"。我正在构建的控件是日历/计划程序控件。

我有一个TimeRuler 控件,需要与标题对齐(下面屏幕截图中的橙色矩形)。我为此使用 SharedSizeGroup。问题是SharedSizeGroupItemsControl 的生成项目内,这会导致一些奇怪的延迟,如您在 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。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    替换绑定到ItemsSource 的集合从未像我希望的那样快。也没有清理和添加项目。它导致一切重新渲染,而且速度非常慢。

    因为我找不到更好的解决方案,我只添加(填充)日项目一次,然后使用 items[i] 语法替换它们。这样,每次您想要显示不同的日期范围时,都不必完全重新渲染 UI。

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 2011-05-24
      • 2011-06-07
      • 1970-01-01
      • 2011-01-26
      • 2021-12-03
      相关资源
      最近更新 更多