WPF animating StackPanel width from 0 to Auto?
I'm trying to animate a StackPanel when its visibility has changed from 0 width to its auto width, this is what I am currently finding:
<Trigger Property="Visibility" Value="Visible">
<Setter Property="Width" Value="0"></Setter>
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Width" Duration="0:0:1">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>NaN</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
Can someone explain how I can achieve this animation? Perhaps this is not possible in the way I am trying to do it?
Thanks, Alex.
+3
source to share
1 answer
Here's a quick mockup project I threw together.
In a window loaded event, I just set the stack bar visibility to Visible and expand to fit the width of the container from left to right ... Hope this suits your needs.
Some notes:
- You must predefine the scale transformation, otherwise the animation will not play.
- If you omit To in an animation, it will update to the default.
And here's the code:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="600" Loaded="Window_Loaded">
<Border HorizontalAlignment="Center" Width="300" Background="Gainsboro">
<Border.Resources>
<Style TargetType="StackPanel" x:Key="expand">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Visibility" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
From="0"
Duration="0:00:01"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Border.Resources>
<StackPanel x:Name="stackpanel" Background="Gray" Visibility="Collapsed" Style="{StaticResource expand}"/>
</Border>
</Window>
+6
source to share