Как программно использовать fadeinanimation.class в uwp?

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

Код выглядит так:

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 или где-нибудь еще?

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

А проблема в том?

kennyzx 31.10.2018 12:07

@kennyzx Я не вижу затухающей анимации. Кроме того, я не уверен, где вызывать story.Begin () и правильна ли привязка.

Gandora 31.10.2018 12:47
0
2
144
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть ряд проблем с вашим кодом.

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

preconfigured opacity animation

Таким образом, он должен увеличить OpacityUIElement до 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();

Протестировал, работает. Надеюсь, это поможет.

Очень признателен! Я также проверил конструктор TimeSpan, и его единица измерения - галочка, что составляет 100 наносекунд. Так что я думаю, что временной интервал в любом случае был бы слишком коротким, чтобы его можно было увидеть. Спасибо еще раз за помощь!

Gandora 31.10.2018 14:38

Другие вопросы по теме