Странный прыжок / мерцание SharedSizeGroup, когда SharedSizeGroup находится внутри сгенерированных элементов ItemsControl - PullRequest
1 голос
/ 04 июня 2019

Проблема (происходит при переключении списка, привязанного к ItemsSource - когда строки с SharedSizeGroup на мгновение исчезают):

very weird jumping

Итак, у меня есть Grid с IsSharedSizeScope="True".Элемент управления, который я создаю, является элементом управления календаря / планировщика.

У меня есть TimeRuler элемент управления, который мне нужно выровнять по заголовкам (оранжевый прямоугольник на скриншоте ниже).Я использую SharedSizeGroup для этого.Проблема в том, что SharedSizeGroup находится внутри сгенерированных элементов ItemsControl, и это вызывает некоторую странную задержку, как вы можете видеть в gif.

Есть ли в любом случае, чтобы сделать это повторно после * 1018ItemsContainerGenerator отображает первый элемент или заканчивает загрузку?

Фрагмент, вызывающий проблему:

<!--  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

Этоможно решить, установив эти значения высоты и не используя SharedSizeGroup, но это больше не будет настолько гибким ...

Или убедившись, что ItemsControl никогда не будет пустым, например, с помощью ObservableCollection, добавлением новых элементов и удалением старых элементов после,Таким образом, RowDefinition с SharedSizeGroup всегда присутствует в визуальном дереве ...

Действительно раздражает ... Я не думаю, что в такой ситуации даже возможно использовать SharedSizeGroup.

1 Ответ

0 голосов
/ 05 июня 2019

Замена коллекции, привязанной к ItemsSource, никогда не была такой быстрой, как я хотел. Ни один не очищал и не добавлял предметы. Это заставляло все перерисовываться, и это было мучительно медленно.

Поскольку я не смог найти лучшего решения, я просто добавляю (заполняю) элементы дня, а затем просто заменяю их, используя синтаксис items[i]. Таким образом, пользовательский интерфейс не нужно будет полностью перерисовывать каждый раз, когда вы хотите отобразить другой диапазон дат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...