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

WPF: Эффект волны при нажатии на кнопку

29.08.2018, 22:39. Показов 3051. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытался реализовать подобный эффект:
Кликните здесь для просмотра всего текста


Хотел сделать так:

В Canvas отрисовать Ellips и просто расширять его. Но не тут то было. Эллипс ударяется об левую и верхнюю границу Canvas'a и не выезжает за них, но вправо и вниз все отлично проходит. Как это исправить?

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Canvas x:Name="MyPrototipButton"  
                Width="200" 
                Height="60" 
                ClipToBounds ="True"
                Background="#FFFF0707" 
                MouseLeftButtonDown="MyPrototipButton_MouseLeftButtonDown" >
 
            <TextBlock Foreground="White" 
                       FontWeight="Bold" 
                       FontSize="14"
                       Canvas.Left="40"
                       Canvas.Top="20">
                       Прототип кнопки
            </TextBlock>
        </Canvas>

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
38
39
40
41
42
43
44
45
46
47
        private void MyPrototipButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            PaintEllipse();
        }
 
        private void PaintEllipse()
        {
            double sek = 0.5;
            Ellipse toDraw = new Ellipse();
            toDraw.Width = 5;
            toDraw.Height = 5;
            toDraw.Fill = Brushes.Green;
 
            #region Вычисление координат вхождения курсора
            Point point = Mouse.GetPosition(MyPrototipButton);
            x = point.X;
            y = point.Y;
        
            Canvas.SetTop(toDraw, y);
            Canvas.SetLeft(toDraw, x);
            #endregion
              MyPrototipButton.Children.Add(toDraw);
 
 
            #region Анимация ширины
            animation = new DoubleAnimation();
            animation.To = 200;
            animation.Duration = TimeSpan.FromSeconds(sek);
            toDraw.BeginAnimation(WidthProperty, animation);
            #endregion
 
            #region Анимация прозрачности
            animation = new DoubleAnimation();
            animation.To = 0;
            animation.Duration = TimeSpan.FromSeconds(sek);
            toDraw.BeginAnimation(OpacityProperty, animation);
            #endregion
 
 
            #region Анимация высоты
            animation = new DoubleAnimation();
            animation.To = 200;
            animation.Duration = TimeSpan.FromSeconds(sek);
            toDraw.BeginAnimation(HeightProperty, animation);
            #endregion
 
        }
Добавлено через 6 часов 15 минут
UPD:
Решил проблему.
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
38
39
40
41
42
43
  public double x, y;
        
        private void PaintEllipse(Canvas canvas)
        {
 
            Ellipse toDraw = new Ellipse();
 
            toDraw.Width = 10;
            toDraw.Height = 10;
            toDraw.Fill = Brushes.Green;
 
            Point point = Mouse.GetPosition(canvas);
 
            x = point.X;
            y = point.Y;
 
            Canvas.SetTop(toDraw, y);
            Canvas.SetLeft(toDraw, x);
            canvas.Children.Add(toDraw);
 
            DoubleAnimation widthAnimation = new DoubleAnimation();
            widthAnimation.From = toDraw.ActualWidth;
            widthAnimation.To = 250;
            widthAnimation.Duration = TimeSpan.FromSeconds(1);
 
            DoubleAnimation heightAnimation = new DoubleAnimation();
            heightAnimation.From = toDraw.ActualHeight;
            heightAnimation.To = 250;
            heightAnimation.Duration = TimeSpan.FromSeconds(1);
            DoubleAnimation opacityAnim = new DoubleAnimation();
            opacityAnim.From = toDraw.Opacity;
            opacityAnim.To = 0;
            opacityAnim.Duration = TimeSpan.FromSeconds(1);
            var ani = new ThicknessAnimation();
            ani.By = new Thickness(-220, -200, 0, 0);
            ani.Duration = new Duration(TimeSpan.FromSeconds(2.0));
 
            toDraw.BeginAnimation(Ellipse.WidthProperty, widthAnimation);
            toDraw.BeginAnimation(Ellipse.HeightProperty, heightAnimation);
            toDraw.BeginAnimation(Ellipse.OpacityProperty, opacityAnim);
            toDraw.BeginAnimation(Ellipse.MarginProperty, ani);
 
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2018, 22:39
Ответы с готовыми решениями:

Как при нажатии на кнопку изменить её изображение на WPF?
Всем привет, как при нажатии на кнопку изменить её изображение, не через XAML, а через C#?

[WPF] Открыть новое окно при нажатии на кнопку
Как сделать чтобы при нажатии на кнопку открывалось новое окно, и не посредственно в какую строку добавлять этот код. P.s я новичек.

Эффект волны на CSS при наведении на элемент
Здравствуйте. Подскажите, как можно сделать с минимальным кодом при наведении на элемент эффект волны? Нравится эффект, как тут. ...

1
2 / 2 / 1
Регистрация: 27.05.2015
Сообщений: 78
30.08.2018, 22:24  [ТС]
UPD Fixed.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
 private void PaintEllipse(Canvas canvas)
        {
            Ellipse toDraw = new Ellipse();
 
            toDraw.Width = 1;
            toDraw.Height = 1;
            toDraw.Fill = Brushes.Gray;
            toDraw.Opacity = 0.9;
            Point point = Mouse.GetPosition(canvas);
 
            x = point.X;
            y = point.Y;
 
            Canvas.SetTop(toDraw, y);
            Canvas.SetLeft(toDraw, x);
            canvas.Children.Add(toDraw);
 
            DoubleAnimation widthAnimation = new DoubleAnimation();
            widthAnimation.From = toDraw.ActualWidth;
            widthAnimation.To = 250;
            widthAnimation.Duration = TimeSpan.FromSeconds(0.5);
 
            DoubleAnimation heightAnimation = new DoubleAnimation();
            heightAnimation.From = toDraw.ActualHeight;
            heightAnimation.To = 250;
            heightAnimation.Duration = TimeSpan.FromSeconds(0.5);
 
            DoubleAnimation x1 = new DoubleAnimation();
            x1.To = Canvas.GetLeft(toDraw) - 125;
            x1.Duration = TimeSpan.FromSeconds(0.5);
 
            DoubleAnimation x2 = new DoubleAnimation();
            x2.To = Canvas.GetTop(toDraw) - 125;
            x2.Duration = TimeSpan.FromSeconds(0.5);
 
 
            DoubleAnimation opacityAnim = new DoubleAnimation();
            opacityAnim.From = toDraw.Opacity;
            opacityAnim.To = 0;
            opacityAnim.Duration = TimeSpan.FromSeconds(0.5);
 
      
            toDraw.BeginAnimation(Ellipse.WidthProperty, widthAnimation);
            toDraw.BeginAnimation(Ellipse.HeightProperty, heightAnimation);
            toDraw.BeginAnimation(LeftProperty, x1);
            toDraw.BeginAnimation(TopProperty, x2);
            toDraw.BeginAnimation(Ellipse.OpacityProperty, opacityAnim); 
           
 
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2018, 22:24
Помогаю со студенческими работами здесь

Как сделать, чтобы при первом нажатии на кнопку TButton появлялось одно сообщение, а при втором нажатии - другое?
помогите как сделать в чтобы в кнопке button при первом нажатий вылазило сообщение ShowMessage('Вы ввели неверные данные, повторите...

Необходимо, чтобы при нажатии на одну из кнопок меню, фрейм с рекламой сворачивался, и разворачивался снова при нажатии на другую кнопку
Задача такая: Есть три фрейма (расположены друг под другом) - это реклама (вверху), меню (посередке) и главная страница (внизу)....

При нажатии на кнопку вывести надпись, при нажатии на другую - сбросить
Создайте программу, которая при нажатии на одну кнопку (объект Button) выводит на этикетку (Label) некоторую надпись, а при нажатии на...

Эффект при нажатии на ссылку
Доброго времени суток! Я, так сказать, в разработке сайтов человек не особо опытный, поэтому прошу помощи и совета у профессионалов. ...

Как при нажатии на кнопку создать еще одну кнопку?
Собственно во прос в выше, я нажимаю на кнопку, рядом должна появится еще одна, как такие вещи вообще реализуются?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru