Я пытаюсь анимировать SolidColorBrush, который является ресурсом моего пользовательского элемента управления. Эта кисть используется как заливка для пяти прямоугольников.
При времени разработки все работает как положено, но при времени выполнения приложение немедленно закрывается с System.InvalidOperationException, указывая, что имя кисти не может быть найдено.
Я запустил пример проекта, имеющий:
- 1 кисть, которую я хотел бы оживить
<SolidColorBrush x:Name="rectBrush" x:Key="rectangleBrush" Color="#b266b2" />
- 5 прямоугольников, которые заполнены с помощью этой кисти.
<Grid>
<StackPanel
Orientation="Horizontal"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<Rectangle
Fill="{StaticResource rectangleBrush}" />
<Rectangle
Fill="{StaticResource rectangleBrush}" />
<Rectangle
Fill="{StaticResource rectangleBrush}" />
<Rectangle
Fill="{StaticResource rectangleBrush}" />
<Rectangle
Fill="{StaticResource rectangleBrush}" />
</StackPanel>
</Grid>
Я использую Blend для Visual Studio, чтобы проверить, правильно ли работает раскадровка.
При запуске я получаю:
System.InvalidOperationException: имя '' rectBrush 'не может быть найдено в области имен' AnimationExample.MainWindow '
Полная разметка XAML:
<Window x:Class="AnimationExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="200">
<Window.Resources>
<SolidColorBrush x:Name="rectBrush" x:Key="rectangleBrush" Color="#b266b2" />
<Style TargetType="Rectangle">
<Setter Property="Width" Value="6" />
<Setter Property="Height" Value="6" />
<Setter Property="Margin" Value="1" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Bottom" />
<Setter Property="RadiusX" Value="3" />
<Setter Property="RadiusY" Value="3" />
</Style>
<Storyboard
x:Key="NowPlayingAnimation"
RepeatBehavior="Forever"
AutoReverse="True">
<ColorAnimation
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"
From="#b266b2"
To="#6666ff"
Duration="0:0:1" />
<ColorAnimation
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"
From="#6666ff"
To="#66b266"
Duration="0:0:1"
BeginTime="0:0:1"/>
<ColorAnimation
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"
From="#66b266"
To="#ffff66"
Duration="0:0:1"
BeginTime="0:0:2"/>
<ColorAnimation
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"
From="#ffff66"
To="#ffc966"
Duration="0:0:1"
BeginTime="0:0:3" />
<ColorAnimation
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"
From="#ffc966"
To="#ff4c4c"
Duration="0:0:1"
BeginTime="0:0:4" />
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource NowPlayingAnimation}"/>
</EventTrigger>
</Window.Triggers>
<Grid>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<Rectangle Fill="{StaticResource rectangleBrush}" />
<Rectangle Fill="{StaticResource rectangleBrush}" />
<Rectangle Fill="{StaticResource rectangleBrush}" />
<Rectangle Fill="{StaticResource rectangleBrush}" />
<Rectangle Fill="{StaticResource rectangleBrush}" />
</StackPanel>
</Grid>
</Window>
У меня два вопроса:
Почему во время разработки все работает нормально, и я могу видеть, что на самом деле хотел бы получить?
Есть ли способ достичь этого?
- полностью в XAML;
- без анимации заливки каждого прямоугольника в отдельности?
Заранее спасибо.