Как реализовать фон параллакса в сгруппированном GridView внутри семантического масштабирования

Я пытаюсь реализовать красивую сетку с горизонтальной прокруткой внутри своего приложения. Я уже реализовал его с помощью библиотеки Q42.WinRT, как показано ниже. :

    <Canvas>
        <StackPanel Orientation="Horizontal" Height="768">
            <StackPanel.RenderTransform>
                <CompositeTransform
                   TranslateX="{Binding ElementName=MyScrollViewer, Path=HorizontalOffset, Converter={StaticResource ParallaxConverter}}" />
            </StackPanel.RenderTransform>
            <Image Source="/Assets/3.jpg" Width="1366" Stretch="UniformToFill"/>
            <Image Source="/Assets/1.jpg" Stretch="UniformToFill"/>
            <Image Source="/Assets/2.jpg" Stretch="UniformToFill"/>
        </StackPanel>
    </Canvas>
    <ScrollViewer
       x:Name="MyScrollViewer"
       HorizontalScrollMode="Enabled"
       HorizontalScrollBarVisibility="Auto"
       VerticalScrollMode="Disabled"
       VerticalAlignment="Center"
       Height="768">
    <GridView>
      //...my gridview goes here
    </GridView> </ScrollViewer>

Все работает нормально, однако в моем приложении мне нужно использовать семантическое масштабирование, и я обнаружил, что семантическое масштабирование НЕ РАБОТАЕТ должным образом при помещении в ScrollViewer.

Как правило, все решения для параллактических фонов, которые я нашел в Интернете, реализуют какую-то функциональность поверх средства просмотра прокрутки, что для меня печально, поскольку я не могу его использовать.

Кто-нибудь может придумать другой способ добиться желаемого эффекта?


person Rafał Saltarski    schedule 10.01.2013    source источник
comment
Убедитесь и проверьте производительность на устройствах ARM. Это обычный убийца производительности. Серьезно.   -  person Jerry Nixon    schedule 11.01.2013
comment
Спасибо за подсказку, Джерри. У меня есть Surface, сидящий прямо рядом со мной, и пока я еще не видел, чтобы он работал хуже!   -  person Rafał Saltarski    schedule 11.01.2013
comment
Да. Поверхность вполне приличная.   -  person Jerry Nixon    schedule 11.01.2013
comment
Любое устройство может работать хуже, если сильно на него надавить. :) Попробуйте добавить несколько слоев полупрозрачных изображений в свой пользовательский интерфейс и сравните производительность на Surface и на ПК с Intel. :)   -  person Filip Skakun    schedule 11.01.2013


Ответы (1)


Как правило, размещение GridViews внутри ScrollViewer - не очень хорошая идея, поскольку внутри них уже есть ScrollViewers...

Вы должны поместить свои 2 GridViews в SemanticZoom.

Возможно, вы могли бы отредактировать шаблон для своего GridView и поместить туда фон параллакса — возможно, как Canvas с некоторым содержимым, которое реагирует на события ViewChanged в GridView.

РЕДАКТИРОВАТЬ*

Вы вдохновили меня на попытку написать ParallaxBackgroundBehavior для набора инструментов. :)

Вы можете увидеть раннюю версию здесь . Также включен пример.

person Filip Skakun    schedule 10.01.2013
comment
Спасибо, Филипп, сейчас попробую! - person Rafał Saltarski; 14.01.2013