代码之家  ›  专栏  ›  技术社区  ›  Konrad

当sharedsizegroup在itemscontrol生成的items中时,sharedsizegroup会奇怪地跳跃/闪烁

  •  1
  • Konrad  · 技术社区  · 5 年前

    问题(在切换绑定到itemssource的列表时发生-具有sharedsizegroup的行暂时消失时):

    very weird jumping

    所以我有一个 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>
    

    可视树或多或少:

    visualtree

    这可以通过使那些高度固定而不使用SyrdsiSeGe来解决,但是它不再是灵活的了。

    或者确保itemscontrol从不为空,例如使用observatecollection,添加新项并在之后删除旧项。这样,具有sharedsizegroup的行定义始终显示在可视化树中…

    真烦人…我认为在这种情况下甚至不可能使用sharedsizegroup。

    0 回复  |  直到 5 年前
        1
  •  0
  •   Konrad    5 年前

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

    因为找不到更好的解决方案,所以我只添加(填充)一次day项,然后使用 items[i] 语法。这样,用户界面就不必在每次显示不同日期范围时都完全重新呈现。