Występują różne problemy, tworząc efekt bardzo podobny do paska zdjęć w aplikacji Aparat.Jak zaimplementować pasek fotografii w stylu aplikacji na WP7?
Wszystko, co chcę zrobić, to wyświetlić rząd siatek, z których każdy ma te same wymiary co ekran (w pionie lub poziomie). Już musiałem zrobić coś hackowanego i create dependency properties that the grids width and height properties bind to, aby zachować proporcje.
To działa dobrze. Ale kiedy tworzę StackPanel dla mojego paska i implementuję nawigację (lub po prostu powiększam z transformacją z-index) widzę, że mój StackPanel nie może wyświetlać większych rozmiarów niż wymiary ekranu (jest przycięty do rozmiaru tylko jednej siatki) . Pomyślałem, że znalazłem wpis opisujący ten problem, ale nie mogę go teraz znaleźć - proszę napisać, jeśli wiesz, o którym postem myślę lub czy wiesz więcej o tym ograniczeniu.
Jedyne obejście, jakie znalazłem, to użycie ScrollViewera, który absolutnie nie jest pożądanym zachowaniem, ale pozwala, aby StackPanel był szerszy niż ekran.
Moim prawdziwym problemem jest zachowanie ScrollViewer - ponieważ muszę przeskakiwać z siatki na siatkę (tak jak robi to zdjęcie) zamiast swobodnie przewijać, i o ile mogę powiedzieć, że HorizontalOffset nie jest właściwością animacyjną. Mogę zmusić go do animowania, wywołując ScrollToHorizontalOffset co 15 milisekund, zasadniczo wdrażając mój własny efekt łagodzenia ręcznie. To wydaje się być ogromnym hackerem, a zachowanie jest bardzo niestabilne (albo nie dostaję zdarzenia ManipulationCompleted za każdym razem, kiedy się tego spodziewam - na końcu każdej operacji machnięcia - albo wbudowana fizyka bezwładności ScrollViewera zakłóca mój efekt).
Czy ktoś wie lepiej obejść problemy, na które się natknąłem, lub zupełnie inny sposób uzyskania paska Photo Camera w Silverlight?
Rozważałem użycie kontrolki Pivot, ale nie jest to dokładnie to, czego chcę (gdybym chciał, aby każdy element był całkowicie animowany, zanim pojawi się następny, zamiast pojawiania się wszystkich dołączonych do jednego paska, powinny być mniej ograniczające sposoby, aby to osiągnąć). Co ważniejsze, pasek jest tylko jednym z wielu efektów, które chcę robić dynamicznie. Chciałbym na przemian obrócić stronę w stylu CoolIris w stylu 3D-tilt lub w stylu FlipPad. Wierzę, że gdybym mógł sprawić, by moja obecna konfiguracja działała ładnie, łatwo byłoby zaimplementować te inne efekty (jako modyfikowalne przejścia). Popełnienie kontroli jak Pivot nie zbliży mnie do tej wizji.
Tu jest mój 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>
Czy zastanawiałeś się nad zmianą zawartości (np. Właściwości źródła obrazu), gdy poruszasz się w lewo lub w prawo? To znacznie prostsze. –
Niezupełnie - to po prostu rezygnacja i naprawdę nie jestem tak daleko. – Subcreation