Я пишу приложение UWP WinRT на C#. Я нашел очень полезный класс BitmapIcon и использую его для сетки значков на главной странице моего приложения. Класс BitmapIcon имеет Foreground bru sh, который можно использовать для переопределения цвета исходного растрового изображения, что удобно, когда что-то контролирует цвета значков отдельно от самого изображения (например, сервер диктует, что значок будет красным, чтобы показать, что это важно).
Я использую анимацию раскадровки, чтобы изменить цвета значков (для мигающего эффекта, который, я знаю, не нравится в наши дни, но я вынужден это сделать). Вот код:
ColorAnimationUsingKeyFrames colorAnimation = new ColorAnimationUsingKeyFrames();
colorAnimation.Duration = TimeSpan.FromSeconds( 3 );
colorAnimation.EnableDependentAnimation = true;
IconImage.Foreground = new SolidColorBrush( iconColor ?? AppSettings.appColor );
DiscreteColorKeyFrame key1 = new DiscreteColorKeyFrame();
key1.Value = finishColor;
key1.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds( 0 ) );
colorAnimation.KeyFrames.Add( key1 );
LinearColorKeyFrame key2 = new LinearColorKeyFrame();
key2.Value = startColor;
key2.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds( 3.0 ) );
colorAnimation.KeyFrames.Add( key2 );
colorAnimation.RepeatBehavior = RepeatBehavior.Forever;
Storyboard.SetTargetProperty( colorAnimation, "(BitmapIcon.Foreground).Color" );
Storyboard.SetTarget( colorAnimation, IconImage );
// Create a storyboard to apply the animation.
//Storyboard myStoryboard = new Storyboard();
animationStoryboard.Children.Add( colorAnimation );
animationStoryboard.Duration = colorAnimation.Duration;
animationStoryboard.RepeatBehavior = colorAnimation.RepeatBehavior;
animationStoryboard.Begin();
Кажется, это работает. Я не получаю никаких исключений, и цвета меняются. Проблема в том, что изменения не отображаются в окне. Если я изменю размер окна приложения, можно увидеть, как меняются цвета, когда я перетаскиваю край окна. Когда я останавливаюсь, они перестают показывать изменения, но изменения, кажется, все еще происходят незаметно на заднем плане. Я могу сказать, что числа меняются на заднем плане из-за скачка цветов, который происходит, когда я на мгновение прекращаю изменять размер окна.
Прошло много времени с тех пор, как я работал над C# UWP WinRT-код, и я думаю, что мне не хватает какого-то атрибута или свойства объекта Imageicon, это Foreground SolidColorBru sh или Color, связанный с SolidColorBru sh.
В другом месте в моем коде, я Используйте аналогичные методы для анимации открывающей и закрывающей боковой панели в окне. Это работает, и анимация плавная, как и ожидалось.
Мне нужно выяснить, почему, кажется, происходит изменение цвета, но без постоянного обновления пользовательского интерфейса.