Ok, mi sono appena imbattuto in qualcosa che mi sta davvero prendendo alla sprovvista.Perché non è possibile animare TextBox.Text in WPF?
Stavo aiutando un collega sviluppatore con un paio di domande non correlate e nel suo progetto stava animando il testo in alcuni TextBlock. Quindi, sono tornato alla mia scrivania e ho ricreato il progetto (per rispondere alle sue domande), ma ho usato per errore TextBox anziché TextBlock. Il mio testo non si animava affatto! (Un sacco di aiuto, lo ero!)
Alla fine, ho capito che il suo xaml stava usando TextBlock e il mio stava usando TextBox. Ciò che è interessante, è che Blend non stava creando fotogrammi chiave quando stavo usando TextBox. Quindi, ho avuto modo di lavorare in Blend usando TextBlock (s) e poi modificato l'xaml a mano, convertendo il TextBlock (s) in TextBox (es). Quando ho eseguito il progetto, ho ottenuto il seguente errore:
InvalidOperationException: '(0)' Storyboard.TargetProperty path contains nonanimatable property 'Text'.
Bene, sembra come se Miscela era abbastanza intelligente per sapere che ... e non generare i fotogrammi chiave nell'animazione (sarebbe solo modificare il valore direttamente sul TextBox). +1 per la miscela.
Quindi, la domanda è diventata: perché non è animabile TextBox.Text? La solita risposta è che la proprietà particolare che si sta animando non è una proprietà di dipendenza. Ma, questo non è il caso, TextBox.Text è a DependencyProperty.
Quindi, ora sono sconcertato! Perché non puoi animare TextBox.Text?
Permettetemi di includere alcuni XAML per illustrare il problema. Il seguente xaml funziona ... ma usa TextBlock (s).
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="TextBoxTextQuestion.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640"
Height="480"
>
<Window.Resources>
<Storyboard x:Key="animateTextStoryboard">
<StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" Storyboard.TargetName="textControl">
<DiscreteStringKeyFrame KeyTime="0:0:1" Value="Goodbye"/>
</StringAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource animateTextStoryboard}"/>
</EventTrigger>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock x:Name="textControl" Text="Hello" FontFamily="Calibri" FontSize="32"/>
<TextBlock Text="World!" Margin="0,25,0,0" FontFamily="Calibri" FontSize="32"/>
</StackPanel>
</Grid>
</Window>
Il seguente XAML non funziona e usa TextBox.Text:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="TextBoxTextQuestion.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640"
Height="480"
>
<Window.Resources>
<Storyboard x:Key="animateTextStoryboard">
<StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBox.Text)" Storyboard.TargetName="textControl">
<DiscreteStringKeyFrame KeyTime="0:0:1" Value="Goodbye"/>
</StringAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource animateTextStoryboard}"/>
</EventTrigger>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox x:Name="textControl" Text="Hello" FontFamily="Calibri" FontSize="32"/>
<TextBox Text="World!" Margin="0,25,0,0" FontFamily="Calibri" FontSize="32"/>
</StackPanel>
</Grid>
</Window>
Interessante ... non ne ha mai avuto bisogno, ma presumibilmente lo sarebbe sempre stato. Spero che qualcuno abbia una risposta. Mi dispiace, non posso aiutare. –
Grazie per dare un'occhiata. Ammetto ... è un po 'una domanda accademica ... ma sono molto curioso di vedere una proprietà di dipendenza che non posso animare. – cplotts