Как получить смещение элемента относительно Scrollviewer в WPF? - PullRequest
1 голос
/ 01 апреля 2012

У меня есть ListBox с несколькими элементами, и я хочу получить смещение элемента относительно Scrollviewer. Я пытался сделать это, используя методы TranslatePoint или TransformToAncestor, но это работало только для элементов, которые уже видны. Итак, как я могу получить смещение для элементов, которые находятся в конце списка и не видны?

1 Ответ

0 голосов
/ 01 апреля 2012

Я не думаю, что это возможно, так как вы используете по умолчанию ItemsPanel, который является VirtualizingStackPanel. Невидимые элементы не прикрепляются к визуальному дереву, они никогда не измерялись и никогда не располагались, поэтому у них нет позиции.

Если виртуализация не является обязательной, вы должны изменить ItemsPanel на StackPanel. Эта панель прикрепляет все элементы к визуальному дереву, и TranslatePoint / TransfromToAncestor будет работать правильно.

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    ...
</ListBox>
...