2016-01-15 5 views
1

Я только начал изучать WPF и XAML, и я попытался получить образец анимации для работы на моей машине. В принципе, фон метки должен меняться, когда определенное значение задано в соответствующем текстовом поле. Выпуск я получаю следующее сообщение об ошибке: Background 'свойство не указывает на DependencyObject в пути' (0) (1)Проблема зависимости анимации WPF

Это XAML:.

<Window x:Class="WpfDataBinding.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:loc="clr-namespace:WpfDataBinding" 
    Title="MainWindow" Height="350" Width="264.828"> 
<Window.Resources> 
    <DataTemplate DataType="{x:Type loc:Person}"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="210"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Name="nameLabel" Grid.Row="0" Grid.Column="0" Text="Name:" FontSize="14" Margin="3,3,0,0"/> 
      <TextBox Name="nameTextBox" Grid.Row="0" Grid.Column="1" Width="200" Text="{Binding Name}" FontSize="14" Margin="3" /> 
      <TextBlock Name="ageLabel" Grid.Row="1" Grid.Column="0" Text="Age:" FontSize="14" Margin="3,3,0,0"/> 
      <TextBox Name="ageTextBox" Grid.Row="1" Grid.Column="1" Width="200" Text="{Binding Age}" FontSize="14" Margin="3"/> 
     </Grid> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Age}" Value="21"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ColorAnimation Storyboard.TargetName="ageLabel" 
              Storyboard.TargetProperty="(Label.Background).(SolidColorBrush.Color)" 
              To="Red" Duration="0:0:1"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</Window.Resources> 
<Grid Margin="0,0,0,-0.2" HorizontalAlignment="Left" Width="248"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <ListBox ItemsSource="{Binding}" /> 
    <StackPanel Grid.Row="2" Grid.ColumnSpan="2"> 
     <Button Content="_Show.." Click="Button_Click"/> 
     <Button Content="_Age" Click="Button_Click_1"/> 
    </StackPanel> 
</Grid> 

Спасибо

ответ

0

(Label.Background). (SolidColorBrush.Color) линия проблема. Она должна быть <ColorAnimation Duration="0" To="Red" Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ageLabel" />

+0

Я сделал это, и у меня возникла другая ошибка: анимационный объект System.Windows.Media.Animation.ColorAnimation не может использоваться для анимации свойства «Фон», поскольку он имеет несовместимый тип «System.Windows.Media.Brush», , –

+0

Я отредактировал мой вопрос ageLabel имеет тип TextBlock, поэтому вы должны использовать (TextBlock.Background). (SolidColorBrush.Color) –

+0

Я использовал TextBlock.Background, и снова получаю первую ошибку. Странно, я получаю эту ошибку, когда я поднимаю событие уведомления для изменения значения текстового поля. Если я прокомментирую событие raise, просто чтобы проверить, я больше не получаю ошибку, но анимация does'nt работает в любом случае. –

1

По this question вам нужно использовать:

ColorAnimation Storyboard.TargetName="ageLabel" 
Storyboard.TargetProperty="(TextBlock.Background).Color" 
To="Red" Duration="0:0:1"/> 

, а не (TextBlock.Background).(SolidColorBrush.Color), как, по-видимому фона и SolidColorBrush являются тем же объектом.

+0

Я использовал его, и теперь я получаю эту ошибку: не удается разрешить все ссылки на свойства в пути свойств '(0) .Color'. Убедитесь, что применимые объекты поддерживают свойства. –

+0

Это неправда. Оба выражения '(TextBlock.Background) .Color' и' (TextBlock.Background). (SolidColorBrush.Color) 'эквивалентны. – Clemens

+0

@Clement - Ну, как вы объясните ошибку? –

3

Для того, чтобы анимировать свойство SolidColorBrush в Background свойства элемента UI, вам необходимо установить фон. Значение по умолчанию для свойства Background TextBlock равно null, поэтому ничего не нужно анимировать.

Итак, сначала установите фон перед анимировать его:

<TextBlock ...> 
    <TextBlock.Background> 
     </SolidColorBrush Color="Transparent"/> 
    </TextBlock.Background> 
</TextBlock> 

Теперь ваш мог бы написать TargetProperty путь

Storyboard.TargetProperty="Background.Color" 

или

Storyboard.TargetProperty="(TextBlock.Background).Color" 

или

Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 

или даже

Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" 

Все выражения эквивалентны. Подробности объясняются в статье PropertyPath XAML Syntax на MSDN.

Смежные вопросы