2016-10-18 14 views
1

Я пытаюсь использовать ColorAnimation программно для анимации ячейки, но я получил это когда я выполняю storyboard.Begin()Объект анимации «ColorAnimation» не может использоваться для анимации свойства «Фон», потому что он имеет несовместимый тип «System.Windows.Media.Brush»

'System.Windows.Media.Animation.ColorAnimation' animation object cannot be used to animate property 'Background' because it is of incompatible type 'System.Windows.Media.Brush'. 

Я определил мой ColorAnimation, как

var storyBoard = new Storyboard(); 
ColorAnimation colorAnimation = new ColorAnimation 
{ 
    From = Colors.Red, 
    To = Colors.CornflowerBlue, 
    Duration = TimeSpan.FromSeconds(1), 
    FillBehavior = FillBehavior.Stop 
}; 

и на его использование я

if (column.UniqueName != "_ID") 
{ 
    var animation = animationMapping[column.UniqueName].Animation; 
    var storyboard = animationMapping[column.UniqueName].Storyboard; 

    Storyboard.SetTarget(animation, cell.Content as TextBlock); 
    //Storyboard.SetTargetProperty(animation, 
    // new PropertyPath((TextBlock.Foreground).Color")); 

    PropertyPath colorTargetPath = new PropertyPath(TextBlock.BackgroundProperty); 
    Storyboard.SetTargetProperty(animation, colorTargetPath); 

    storyboard.Begin(); 
} 

Какой параметр мне нужно передать новому PropertyPath? Я пытался следовать this example, но без везения.

+0

Используйте этот 'PropertyPath colorTargetPath = новый PropertyPath (" (TextBlock.Background). (SolidColorBrush.Color) ", null);'. – AnjumSKhan

+0

@AnjumSKhan Вы действительно пробовали свой код? Если я запустил свой код, я получаю 'InvalidOperationException' с сообщением' Не удается разрешить все ссылки на свойства в пути свойств '(TextBlock.Background). (SolidColorBrush.Color)'. Убедитесь, что применимые объекты поддерживают свойства. '. Очевидно, что этот код не работает. (См. Мой ответ для рабочего.) – haindl

ответ

3

Вы должны указать правильные PropertyPath на ColorBrush.

Таким образом, вместо

PropertyPath colorTargetPath = new PropertyPath(TextBlock.BackgroundProperty); 

вы должны использовать

PropertyPath colorTargetPath = 
    new PropertyPath("(0).(1)", TextBlock.BackgroundProperty, SolidColorBrush.ColorProperty); 

Это эквивалент Storyboard.TargetProperty="(TextBlock.Background).Color" в XAML вашего связанного ответа.

Теперь он должен работать - по крайней мере, если существующий BrushTextBlock.Background - это SolidColorBrush. Если нет, вам необходимо адаптировать PropertyPath к типу Brush.

+0

Это было предположение – AnjumSKhan

+0

@haindl Я пробовал ваше предложение, но у меня свойство «Background» не указывает на DependencyObject в пути '(0). (1)'. – advapi

+1

@advapi Вы получите это сообщение об ошибке, если 'Background' затронутого' TextBlock' 'null. ('null' является значением по умолчанию для' TextBlock.Background'.) Пожалуйста, проверьте, установлен ли 'Background' на' SolidColorBrush', прежде чем вы начнете 'Storyboard', потому что вы не можете анимировать то, чего там нет , – haindl

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

  • Нет связанных вопросов^_^