Ok, tôi vừa chạy vào thứ gì đó thực sự khiến tôi mất cảnh giác.Tại sao TextBox.Text không hoạt động trong WPF?
Tôi đã trợ giúp một nhà phát triển đồng nghiệp với một vài câu hỏi không liên quan và trong dự án của anh ấy, anh ấy đang làm hoạt hình văn bản vào một số TextBlock (s). Vì vậy, tôi quay lại bàn làm việc của mình và tái tạo dự án (để trả lời các câu hỏi của mình), nhưng tôi đã vô tình sử dụng TextBox thay vì TextBlock. Văn bản của tôi không hoạt hình chút nào! (Rất nhiều trợ giúp, tôi đã!)
Cuối cùng, tôi đã tìm ra rằng xaml của anh ấy đang sử dụng TextBlock và tôi đang sử dụng TextBox. Điều thú vị là Blend không tạo khung chính khi tôi đang sử dụng TextBox. Vì vậy, tôi đã nhận nó để làm việc trong Blend bằng cách sử dụng TextBlock (s) và sau đó sửa đổi xaml bằng tay, chuyển đổi TextBlock (s) vào TextBox (es). Khi tôi chạy dự án, tôi nhận được lỗi sau:
InvalidOperationException: '(0)' Storyboard.TargetProperty path contains nonanimatable property 'Text'.
Vâng, nó có vẻ như nếu Blend là đủ thông minh để biết rằng ... và không tạo ra các khung chính trong phim hoạt hình (nó sẽ chỉ sửa đổi giá trị trực tiếp trên TextBox). 1 cho Blend.
Vì vậy, câu hỏi đã trở thành: tại sao TextBox không tiếp tục hoạt ảnh? Câu trả lời thông thường là thuộc tính cụ thể mà bạn đang tạo hoạt ảnh không phải là DependencyProperty. Nhưng, đây không phải là trường hợp, TextBox.Text là một DependencyProperty.
Vì vậy, bây giờ tôi hoang mang! Tại sao bạn không thể tạo hiệu ứng TextBox.Text?
Hãy để tôi bao gồm một số xaml để minh họa sự cố. Các xaml sau hoạt động ... nhưng sử dụng 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>
Sau đây XAML không hoạt động và sử dụng 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>
Thú vị ... không bao giờ có nhu cầu về điều này, nhưng luôn được cho là như vậy. Hy vọng rằng ai đó có câu trả lời. Xin lỗi tôi không thể giúp. –
Cảm ơn bạn đã xem qua. Tôi thừa nhận ... nó là một chút của một câu hỏi học tập ... nhưng tôi rất tò mò muốn thấy một DependencyProperty tôi không thể animate. – cplotts