Windows phone ScrollViewer не работает при применении проекции

Я обнаружил эту проблему в реальном сложном проекте, но ее можно воспроизвести в простом тестовом проекте. Итак, у меня есть тестовая страница UWP

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid
            VerticalAlignment="Top"
            HorizontalAlignment="Left"
            Height="100">
            <Grid.Projection>
                <PlaneProjection GlobalOffsetY="100"/>
            </Grid.Projection>
            <ScrollViewer
                VerticalScrollMode="Enabled"
                VerticalScrollBarVisibility="Visible">
                <StackPanel>
                    <Button Content="1"/>
                    <Button Content="2"/>
                    <Button Content="3"/>
                    <Button Content="4"/>
                    <Button Content="5"/>
                    <Button Content="6"/>
                    <Button Content="7"/>
                </StackPanel>
            </ScrollViewer>
        </Grid>
    </Grid>

он работает, как и ожидалось, в версии для ПК, но скроллер не работает в мобильной (Windows Phone) версии. та же история с Windows Phone 8.1 Если прокомментировать проекцию на родительскую сетку - все ок.

Любые идеи исправления или, по крайней мере, обходного пути для этой проблемы?


person anton    schedule 06.08.2016    source источник


Ответы (1)


он работает, как и ожидалось, в версии для ПК, но скроллер не работает в мобильной (Windows Phone) версии.

По замыслу, если глобальное преобразование scrollviewer (здесь — преобразование проекции) не может быть представлено как Матричное преобразование, базовый слой, который обрабатывает взаимодействие касанием, не может использоваться. .

Поэтому, если вам нужно применить только GlobalOffsetY или GlobalOffsetX. Вместо этого я рекомендую вам использовать TranslateTransform. Это не помешает прокрутке ScrollViewer:

<Grid
    VerticalAlignment="Top"
    HorizontalAlignment="Left"
    Height="500" Width="200">
    <Grid.RenderTransform>
        <TranslateTransform Y="100"/>
    </Grid.RenderTransform>
    <ScrollViewer
        VerticalScrollMode="Enabled"
        VerticalScrollBarVisibility="Visible">
        <StackPanel>
            <Button Content="1"/>
            <Button Content="2"/>
            <Button Content="3"/>
            <Button Content="4"/>
            <Button Content="5"/>
            <Button Content="6"/>
            <Button Content="7"/>
        </StackPanel>
    </ScrollViewer>
</Grid>
person Elvis Xia - MSFT    schedule 11.08.2016
comment
Спасибо за ответ! Я уже сам нашел обходной путь RenderTransform. К сожалению, моя проблема немного глубже - мой реальный проект использует Xamarin.Forms. и формы полагаются на Projection для анимации перевода под капотом... так что это сложно. Я сделал собственный рендерер для своего элемента управления, переопределяя TranslationX / Y, чтобы использовать преобразование вместо проекции, но это не оптимальное решение. В любом случае - я помечаю ваш ответ как ответ, поскольку он дает четкое описание корня этой проблемы и возможных решение. - person anton; 13.08.2016