В WPF, когда пользователь получает фокус в TextBox
, мне нужна анимация, которая заставит TextBox
стать многострочной и сделать ее Width
больше (пока он печатает), и когда фокус потерян, что TextBox
возвращается к первоначальному размеру.Grow/Shrink WPF Animation
Размер неизвестен.
Кроме того, в конечном счете, TextBox
должен быть в пределах WPF DataGrid
.
Я раньше не делал анимацию и хотел бы помочь, чтобы я начал. Благодарю.
EDIT: Мне удалось выполнить анимацию, имея некоторые фиксированные значения ширины (что делает ее многострочной не работает, но это не так важно). Итак, теперь мой вопрос заключается в том, как я могу вернуться к своему первоначальному размеру, если это неизвестно. Есть ли множитель, который я мог бы использовать на свойстве Width
?
Вот мой код до сих пор:
<Window.Resources>
<Storyboard x:Key="GrowStoryboard">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(FrameworkElement.Width)">
<SplineDoubleKeyFrame KeyTime="00:00:00.4000000" Value="400" KeySpline="0.54,0.27,0.38,0.69"/>
</DoubleAnimationUsingKeyFrames>
<Int32Animation Duration="0:0:0.4" From="1" To="3" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(TextBox.MinLines)">
</Int32Animation>
</Storyboard>
<Storyboard x:Key="ShrinkStoryboard">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(FrameworkElement.Width)">
<SplineDoubleKeyFrame KeyTime="00:00:00.4000000" Value="200" KeySpline="0.54,0.27,0.38,0.69"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FocusManager.GotFocus" SourceName="textBox">
<BeginStoryboard x:Name="GrowStoryboard_BeginStoryboard" Storyboard="{StaticResource GrowStoryboard}"/>
</EventTrigger>
<EventTrigger RoutedEvent="FocusManager.LostFocus" SourceName="textBox">
<BeginStoryboard x:Name="ShrinkStoryboard_BeginStoryboard" Storyboard="{StaticResource ShrinkStoryboard}"/>
</EventTrigger>
</Window.Triggers>
<StackPanel>
<TextBox x:Name="textBox" Width="200" Height="20" Text="TextBox" />
<TextBox x:Name="textBox1" Width="200" Height="20" Text="TextBox" />
</StackPanel>