Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74

Анимация текста в Textblock

20.10.2019, 16:33. Показов 6839. Ответов 7

Студворк — интернет-сервис помощи студентам
Можно ли как-то сделать прыгающий текст как тут + смена цвета на любой рандомный у каждой буквы вот код самого текста
XML
1
2
3
4
5
6
7
8
9
10
<TextBlock Style="{DynamicResource MaterialDesignTitleTextBlock}" TextAlignment="Center">
                            <Run Foreground="Red">F</Run>
                            <Run Foreground="Orange">R</Run>
                            <Run Foreground="Yellow">E</Run>
                            <Run Foreground="Green">E</Run>
                            <Run Foreground="RoyalBlue">C</Run>
                            <Run Foreground="CornflowerBlue">A</Run>
                            <Run Foreground="Red">K</Run>
                            <Run Foreground="Orange">E</Run>
                        </TextBlock>
Вот скрин где будет текст
Миниатюры
Анимация текста в Textblock  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2019, 16:33
Ответы с готовыми решениями:

Перенос текста в TextBlock
Здравствуйте. Возник вопрос: нужно переносить текст в TextBlock, но он не хочет, вместо этого он пытается все уместить в одну строчку,...

Частичное отображение текста в TextBlock
я хотел просто добавить TextBlock, но у меня получается текст видно только на половину :( вот такая разметка: &lt;TextBlock...

TextBlock перенос текста WPF
Всем доброго времени суток! Подскажите пожалуйста, как сделать в WPF текстблоке перенос текста на новую строку, когда текст по ширине...

7
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
20.10.2019, 18:03
Ask0n, одну анимацию на все слово - решительно нет. Можно каждую букву анимировать отдельно, но запустить все анимации (каждой буквы) вместе - не получится.

Добавлено через 4 минуты
Но вы всегда можете по старому-доброму написать свою анимацию в коде.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,110
Записей в блоге: 2
20.10.2019, 19:11
Ask0n, я очень сомневаюсь, что это WPF-анимация. Слишком уж сложно для неё.
И это явно не один элемент для всех букв, а отдельный для каждой.
Можно сделать через привязку положения элемента с ОДНОЙ буквой к синусной функции от времени, со смещением для каждой буквы.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
20.10.2019, 20:07  [ТС]
Тогда лучше GIF делать или что-то еще ?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,110
Записей в блоге: 2
20.10.2019, 20:48
Ask0n, если это неизменяемая надпись, то Gif возможно будет проще.
Если надпись меняется, то сочетание XAML+C#.
0
1595 / 600 / 185
Регистрация: 05.12.2015
Сообщений: 970
20.10.2019, 20:52
попробуй самый простой вариант:
Вложения
Тип файла: zip jumper.zip (10.1 Кб, 28 просмотров)
1
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
20.10.2019, 21:08
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Вот вариант как самому отрисовать. Много текста!
Кликните здесь для просмотра всего текста
Сначала контрол отображающий Visual
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class VisualHost : FrameworkElement
    {
        public DrawingVisual Visual
        {
            get=> GetValue(VisualProperty) as DrawingVisual;
            set => SetValue(VisualProperty, value);
        }
 
        public VisualHost()
        {
             AddVisualChild(Visual);
        }
 
        protected override int VisualChildrenCount
        {
            get { return 1; }
        }
        private void Rebind(DrawingVisual old, DrawingVisual New)
        {
            base.RemoveLogicalChild(old);
            base.RemoveVisualChild(old);
            base.AddVisualChild(New);
            base.AddLogicalChild(New);
        }
        protected override Visual GetVisualChild(int index)
        {
            return Visual;
        }
        public static readonly DependencyProperty VisualProperty = 
            DependencyProperty.Register( "Visual", typeof(DrawingVisual), typeof(VisualHost),
                    new FrameworkPropertyMetadata(VisualPorpertyChanged) { BindsTwoWayByDefault = true });
        private static void VisualPorpertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            VisualHost instance = obj as VisualHost;
            instance.Rebind((DrawingVisual)e.OldValue, (DrawingVisual)e.NewValue);
        }
    }
И такая разметка к нему
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="TEST" Height="310" Width="485">
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Grid>
        <local:VisualHost Margin="0, 20" Visual="{Binding MainImage}"/>
    </Grid>
</Window>
И потом модель
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class HeightCalculator
    {
        public HeightCalculator(int min, int max, int cur)
        {
            StartPosX = min;
            MaxPosX = max;
            CurrentPosX = cur;
        }
        private int StartPosX;
        private int CurrentPosX;
        private int MaxPosX = 40;
        private int StridePos = 1;
        bool isUp = false;
        public int Height
        {
            get
            {
                if (CurrentPosX > MaxPosX)
                {
                    isUp = false;
                }
                else if (CurrentPosX < StartPosX)
                {
                    isUp = true;
                }
                CurrentPosX = isUp ? CurrentPosX + StridePos : CurrentPosX - StridePos;
                return CurrentPosX;
            }
        }
 
    }
[CSHARP]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MyAnimation
    {
        public MyAnimation(string text)
        {
            Text = text;
            CalcList = new List<HeightCalculator>(text.Length);
            for (int i = 0; i < text.Length; i++)
            {
                CalcList.Add(new HeightCalculator(0, 30, 30 - i * (text.Length - 1) * 3));
            }
        }
        private List<HeightCalculator> CalcList;
        public string Text;
        public Visual StepAnimate
        {
            get
            {
                DrawingVisual drawingVisual = new DrawingVisual();
                using (DrawingContext drawingContext = drawingVisual.RenderOpen())
                {
                    for (int i = 0; i < Text.Length; i++)
                    {
                        FormattedText ft = new FormattedText(Text[i].ToString(), CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Klavika"), 40, Brushes.Red);
                        drawingContext.DrawText(ft, new Point(i * 25, CalcList[i].Height));
                    }
                }
                return drawingVisual;
            }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    public class MainViewModel : INotifyPropertyChanged
    {
        public MainViewModel()
        {
            AnimateStart();
        }
        private async void AnimateStart()
        {
            MyAnimation animation = new MyAnimation("Rock");
            while (true)
            {
                MainImage = animation.StepAnimate;
                OnPropertyChanged("MainImage");
                await Task.Delay(20);
            }
        }
        public Visual MainImage
        {
            get => _MainImage;
            set
            {
                _MainImage = value;
                OnPropertyChanged();
            }
        }
        private Visual _MainImage;
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Цвет, размеры, положение, шрифт - все настраивается в классе MyAnimation
Вложения
Тип файла: rar WpfApp1.rar (252.5 Кб, 44 просмотров)
2
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 74
21.10.2019, 02:09  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
Вот вариант как самому отрисовать. Много текста!
Кликните здесь для просмотра всего текста
Цвет, размеры, положение, шрифт - все настраивается в классе MyAnimation
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2019, 02:09
Помогаю со студенческими работами здесь

TextBlock/TextBox, ввод текста из цикла
Здравствуйте! Изучаю C# недавно, немного времени назад перешел с консоли на WPF. Возник следующий вопрос: Например есть List с...

Утечка памяти при обновлении текста TextBlock
При каждом тике таймера обновляется текст TextBlock'a. private void Paint(object sender, EventArgs e) { ...

Изменение размера шрифта в textBlock в зависимости от длины текста
день добрый! есть wpf приложение с такой разметкой: &lt;Grid&gt; &lt;Grid.RowDefinitions&gt; &lt;RowDefinition...

Как сделать анимацию изменения текста в textblock по нажатию на кнопку
как сделать анимацию изменения текста в textblock по нажатию на кнопку?

Обрезание текста в TextBlock
Здравствуйте форумчане :victory: У меня такая проблема. Почему-то на странице текст заключенный в TextBlock обрезается на половине. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru