Ok, je viens de tomber sur quelque chose qui me prend vraiment au dépourvu. J'aidais un collègue développeur avec quelques questions sans rapport et dans son projet il animait du texte dans certains TextBlock (s). Donc, je suis retourné à mon bureau et recréé le projet (afin de répondre à ses questions), mais j'ai accidentellement utilisé TextBox au lieu de TextBlock. Mon texte n'animait pas du tout! (Beaucoup d'aide, j'étais!)Pourquoi TextBox.Text dans WPF n'est-il pas animé?
Finalement, j'ai compris que son xaml utilisait TextBlock et le mien utilisait TextBox. Ce qui est intéressant, c'est que Blend ne créait pas d'images clés lorsque j'utilisais TextBox. Donc, je l'ai eu à travailler dans Blend en utilisant TextBlock (s), puis modifié le xaml à la main, en convertissant le TextBlock (s) en TextBox (es). Quand je courais le projet, je suis l'erreur suivante:
InvalidOperationException: '(0)' Storyboard.TargetProperty path contains nonanimatable property 'Text'.
Eh bien, il semble que si Blend était assez intelligent pour savoir que ... et ne pas générer les images clés dans l'animation (il serait juste modifiez la valeur directement sur le TextBox). +1 pour le mélange. Donc, la question est devenue: pourquoi TextBox.Text n'est-il pas animable? La réponse habituelle est que la propriété particulière que vous animez n'est pas DependencyProperty. Mais, ce n'est pas le cas, TextBox.Text est un DependencyProperty.
Alors, maintenant je suis éberlué! Pourquoi ne pouvez-vous pas animer TextBox.Text?
Permettez-moi inclure quelques XAML pour illustrer le problème. Le xaml suivant fonctionne ... mais utilise 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>
Le XAML suivant ne fonctionne pas et utilise 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>
Intéressant ... n'a jamais eu besoin de cela, mais toujours présumé qu'il le serait. J'espère que quelqu'un a une réponse. Désolé je ne peux pas aider. –
Merci d'avoir jeté un oeil. J'avoue ... c'est un peu une question académique ... mais je suis très curieux de voir une DependencyProperty que je ne peux pas animer. – cplotts