У меня возникает ряд проблем, создающих эффект, очень похожий на фото в приложении "Камера".
Все, что я хочу сделать, это отобразить ряд сеток, каждый из которых имеет те же размеры, что и экран (будь то в портретной или альбомной ориентации). Теперь мне нужно было сделать что-то взломанное и создать свойства зависимостей, которые привязывают к ширине и высоте свойства сетки для поддержания соотношения сторон.
И это прекрасно работает. Но когда я создаю StackPanel для своей полосы и реализую свою навигацию (или просто увеличиваю масштаб с помощью преобразования z-index), я вижу, что мой StackPanel не может отображать больше размеров экрана (он обрезается до размера только одной сетки), Я думал, что нашел сообщение, описывающее эту проблему, но я не могу его найти сейчас - напишите, если вы знаете, о чем я думаю, или если вы знаете больше об этом ограничении.
Единственным обходным решением, которое я нашел, является использование ScrollViewer, который абсолютно не соответствует поведению, которое я хочу, но он позволяет StackPanel быть шире экрана.
Моя реальная проблема связана с поведением ScrollViewer - потому что мне нужно прыгать с сетки на сетку (как и на фото-полосе) вместо свободной прокрутки, и насколько я могу сказать, что HorizontalOffset не является анимационным свойством. Я могу заставить его оживить, вызвав ScrollToHorizontalOffset каждые 15 миллисекунд, в основном реализуя мой собственный эффект ослабления вручную. Это кажется огромным взломом, и поведение очень глючное (либо я не получаю событие ManipulationCompleted каждый раз, когда я этого ожидаю) в конце каждого действия салфетки, или встроенная физика инерции ScrollViewer мешает моему эффекту).
Кто-нибудь знает лучшие обходные пути для проблем, с которыми я столкнулся, или совершенно другой способ получить опыт работы с лентой камеры в Silverlight?
Я рассмотрел использование элемента управления Pivot, но это не совсем то, что я хочу (если бы я хотел, чтобы каждый элемент полностью анимировался до того, как появился следующий, вместо того, чтобы быть прикрепленным к одной полосе, быть менее ограниченными способами для достижения этого). Что еще более важно, полоса - всего лишь один из многих эффектов, которые я хочу сделать динамически. Я хотел бы поочередно включать 3D-наклон CoolIris или поворот страницы в стиле FlipPad. Я полагаю, что если бы я мог хорошо настроить свою текущую настройку, было бы легко реализовать эти другие эффекты (в качестве допустимых переходов). Приверженность управлению, подобному Pivot, не приблизит меня к этому видению.
Вот мой XAML:
<Grid x:Name="LayoutRoot" Background="Transparent" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" HorizontalAlignment="Left" VerticalAlignment="Top">
<ScrollViewer x:Name="SlideScroller" VerticalScrollBarVisibility="Disabled" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" Margin="0,0,0,-31" ScrollViewer.HorizontalScrollBarVisibility="Auto" HorizontalAlignment="Left" VerticalAlignment="Top">
<StackPanel x:Name="SlidePanel" Orientation="Horizontal" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" VerticalAlignment="Top" HorizontalAlignment="Left">
<Grid x:Name="Slide0" Margin="0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" Background="#FFCCCCCC">
<Image x:Name="Photo0" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" VerticalAlignment="Top" HorizontalAlignment="Left" Stretch="UniformToFill"/>
</Grid>
<Grid x:Name="Slide1" Margin="0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" Background="#FFCCCCCC">
<Image x:Name="Photo1" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" VerticalAlignment="Top" HorizontalAlignment="Left" Stretch="UniformToFill"/>
</Grid>
<Grid x:Name="Slide2" Margin="0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" Background="#FFCCCCCC">
<Image x:Name="Photo2" Width="{Binding RealWidth, ElementName=phoneApplicationPage}" Height="{Binding RealHeight, ElementName=phoneApplicationPage}" VerticalAlignment="Top" HorizontalAlignment="Left" Stretch="UniformToFill"/>
</Grid>
</StackPanel>
</ScrollViewer>
</Grid>