Ориентация раскадровки GridLength для WP8
Я хочу сделать раскадровку для RowDefinition, изменяя высоту, и я нашел это, чтобы помочь мне. Единственная проблема, когда я хочу создать класс GridLengthAnimation, я не могу сделать его AnimationTimeline. Это потому, что Windows Phone 8 не поддерживает это?
В этом случае есть ли другой способ создания раскадровки для RowDefinition?
1 ответ
Самый простой способ может заключаться в том, что вы помещаете сетки в строки и анимируете их свойство Height следующим образом.
Вот XAML:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Background="AliceBlue"
Grid.Row="0"
Height="100"
Tap="Grid_Tap"
CacheMode="BitmapCache" />
<Grid Background="AntiqueWhite"
Grid.Row="1"
Height="100"
Tap="Grid_Tap"
CacheMode="BitmapCache" />
<Grid Background="Aqua"
Grid.Row="2"
Height="100"
Tap="Grid_Tap"
CacheMode="BitmapCache" />
<Grid Background="Aquamarine"
Grid.Row="3"
Height="100"
Tap="Grid_Tap"
CacheMode="BitmapCache" />
</Grid>
И CS:
private void AnimateHeight(Grid grid)
{
double newHeight = grid.ActualHeight == 100 ? 300 : 100; //select the height we want to animate
Storyboard story = new Storyboard();
DoubleAnimation animation = new DoubleAnimation();
animation.To = newHeight;
animation.Duration = TimeSpan.FromSeconds(0.5);
Storyboard.SetTarget(animation, grid);
Storyboard.SetTargetProperty(animation, new PropertyPath(Grid.HeightProperty));
story.Children.Add(animation);
story.Begin();
}
private void Grid_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
Grid grid = sender as Grid; //select the grid we tapped
AnimateHeight(grid);
}
Обратите внимание, что я поместил cachemode в bitmapcache всех сеток. Это не обязательно, но дает более плавную анимацию, потому что статические сетки не будут перерисовываться снова в каждом кадре.