Как сделать анимацию мигания прямоугольника (с определенной частотой) в Winui3 в XAML?

Мне бы хотелось, чтобы прямоугольник мигал (с определенной частотой) в моем проекте Winui3 (на C++) в XAML, вот мой код в XAML:

<StackPanel>
    <StackPanel.Resources>
        <Storyboard x:Name = "Rear_Frame_Blink">
            <DoubleAnimation 
                Storyboard.TargetName = "rec_rear" 
                Storyboard.TargetProperty = "Opacity" 
                From = "1.0" To = "0.0" Duration = "Automatic"  
                AutoReverse = "True" RepeatBehavior = "Forever">                                
            </DoubleAnimation>
        </Storyboard>
    </StackPanel.Resources>
    
    <Rectangle x:Name = "rec_rear" Loaded = "RearFrame_Start_blink" Width = "2275" Height = "480"  Stroke = "Red" StrokeThickness = "12" Opacity = "0.9"/>
    
</StackPanel>

И я хочу, чтобы он запускал/переставал мигать программно на C++, с помощью функции RearFrame_Start_blink, с помощью Rear_Frame_Blink.begin(); Но это не сработает из-за такой ошибки: идентификатор C++ не определен в Rear_Frame_Blink. Может ли кто-нибудь помочь мне в этом? Большое спасибо!

Пожалуйста, поделитесь кодом C++, поскольку именно здесь, по вашему мнению, и заключается проблема. Кроме того, xaml должно быть больше, чем просто то, чем вы поделились. Каков класс верхнего уровня, внутри которого находится StackPanel?

Raymond Chen 08.05.2024 06:51

Ваш код работает для меня так же, как пример анимации темы. Обратите внимание: C# Rear_Frame_Blink.Begin(); C++ Rear_Frame_Blink().Begin();

YangXiaoPo-MSFT 08.05.2024 07:57

Спасибо, Ян, я использовал «Rear_Frame_Blink().Begin();» в моем коде, но я получил следующую ошибку, вы знаете, почему? Большое спасибо! winrt::impl::consume_Microsoft_UI_Xaml_Media_Animation_IStor‌​yboard<winrt::Micros‌​oft::UI::Xaml::Media‌​::Animation::IStoryb‌​oard>::Begin’: функцию, возвращающую значение «auto», нельзя использовать прежде чем это будет определено

Clara2022 08.05.2024 09:06

Я наконец решил эту проблему, добавив «#include «winrt/Microsoft.UI.Xaml.Media.Animation.h»» Все равно спасибо!

Clara2022 08.05.2024 09:45

Подождите, вы написали это в вопросе «с такой ошибкой: идентификатор C++ не определен на Rear_Frame_Blink», но в комментариях вы написали другую ошибку: «функция, возвращающая «авто», не может быть использована, пока она не определена». Трудно диагностировать проблему, если предоставлена ​​неверная информация.

Raymond Chen 08.05.2024 17:06

После перестройки проекта ошибка «Идентификатор C++ не определен на Rear_Frame_Blink» исчезла. Не знаю почему, но само решилось. А после добавления «#include «winrt/Microsoft.UI.Xaml.Media.Animation.h» эта проблема решена: функцию, возвращающую «auto», нельзя использовать, пока она не определена». Вот и все.

Clara2022 11.05.2024 08:47
Animista - анимация на ходу!
Animista - анимация на ходу!
Если вы веб-дизайнер или разработчик, вы знаете, что добавление анимации на ваш сайт может помочь сделать его более привлекательным и динамичным....
Повысьте уровень своего сайта с помощью анимации CSS и JavaScript: Пошаговое руководство
Повысьте уровень своего сайта с помощью анимации CSS и JavaScript: Пошаговое руководство
Если вы хотите добавить визуальный интерес к своему сайту, то внедрение анимации с помощью CSS и JavaScript может стать отличным способом сделать это....
0
7
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

У меня этот код работает так же, как пример анимации темы. Но обратите внимание: ссылаться на именованные ресурсы — это другое дело. Например, в C# Rear_Frame_Blink.Begin();, в C++ Rear_Frame_Blink().Begin();.

Что касается ошибок вида «consume_Something: функция, возвращающая «auto», нельзя использовать до ее определения»?, см. блог @RaymondChen Почему мой проект C++/WinRT получает ошибки вида «consume_Something: function» который возвращает «auto», нельзя использовать до его определения»?

Для нетерпеливых: проблема в том, что у вас отсутствует заголовочный файл. для интерфейса, который вы используете.

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