Как программно использовать FadeInAnimation.class в UWP? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь сделать простое затухание анимации программно. В XAML у меня есть страница с именем Grid внутри.

Код выглядит следующим образом:

InitializeComponent();
Button button = new Button() {
    Width = 200,
    Height = 200,
    Content = "Text",
    Background = new SolidColorBrush(Colors.Red)
};
button.Name = "target";

Storyboard myStory = new Storyboard();
FadeInThemeAnimation animation = new FadeInThemeAnimation() {
    BeginTime = new TimeSpan(2),
    Duration = new TimeSpan(4),
};

animation.TargetName = button.Name;
Storyboard.SetTarget(animation, button);
Storyboard.SetTargetProperty(animation, button.Name);

myStory.Children.Add(animation);
myGrid.Children.Add(button);

button.PointerEntered += (s, e) => {
    myStory.Begin();
};

Проблема в том, что я не вижу никакой анимации. Кроме того, я не уверен, куда звонить begin(). Лучше всего принять участие в Loaded мероприятии или еще где-нибудь?

Редактировать: Здесь - это анимация FadeInTheme, которую я пытаюсь использовать.

1 Ответ

0 голосов
/ 31 октября 2018

Существует ряд проблем с вашим кодом.

Во-первых, в официальном документе, FadeInThemeAnimation описывается как

предварительно настроенная анимация непрозрачности

Итак, он должен увеличить Opacity из UIElement до 1,0 или что-то в этом роде. Но я считаю, что Button, который вы нацеливаете на анимацию, уже имеет непрозрачность 1,0. Таким образом, вы не увидите никаких изменений, даже если анимация работает. Поэтому вместо этого попробуйте FadeOutThemeTransition, чтобы проверить, работает ли ваш код.

Во-вторых, вы не устанавливаете все эти вещи для установки цели:

SetTarget, SetTargetName или animation.TargetName =

Вы просто используете один из них.

В-третьих, Вы не устанавливаете свойство Duration с помощью new TimeSpan(4). Я не знаю, какой тип TimeSpan возвращается конструктором, который вы использовали, но он не работает с этим, он работает с чем-то вроде TimeSpan.FromMilliseconds(500).

В-четвертых, что вы пытаетесь сделать с этим BeginTime свойством FadInThemeAnimation? Даже если вы используете его намеренно, проблема TimeSpan также применима и здесь.

Итак, после всего этого попробуйте что-то вроде этого:

Storyboard myStory = new Storyboard();
FadeOutThemeAnimation animation = new FadeOutThemeAnimation()
{
    Duration = TimeSpan.FromMilliseconds(500)
};

Storyboard.SetTarget(animation, button);

myStory.Children.Add(animation);
PlayGround.PointerPressed += (kk, kkk) => myStory.Begin();

Я проверял это, оно работает. Надеюсь, это поможет.

...