123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using Avalonia.Controls;
- using Avalonia.Controls.Shapes;
- using Avalonia.Media;
- using Avalonia.Threading;
- using AvaloniaMVVM.Models;
- using ReactiveUI;
- using System;
- using System.Collections.Generic;
- namespace AvaloniaMVVM.ViewModels
- {
-
- public class MainWindowViewModel : ViewModelBase
- {
- DispatcherTimer timer = new DispatcherTimer(); // создание объекта для таймера
-
- // конструктор
- public MainWindowViewModel()
- {
-
- timer.Interval = new TimeSpan(0, 0, 5); // задание того, на какое кол-во времени будет запущен таймер
- timer.Tick += new EventHandler(timer_tick); // добавление объекту таймера событие, запускающего генерацию капчи (обработчик timer_tick реализован ниже)
- }
- #region Реализация паттерна
- // свойство для отображения значения числового поля и изменения его при увеличении значения числового поля:
- public int Count
- {
- get => ModelClass.count;
- set => this.RaiseAndSetIfChanged(ref ModelClass.count, value);
- }
- // свойство для отображения фамилий в раскрывающемся списке
- public List<string> SurnameList => ModelClass.surnameList;
- // свойство для отображения изначально выбранного значеия в списке
- public string SelectedSurname => ModelClass.surnameList[0];
- public void AddCount() // метод, который увеличивает числовое значение
- {
- Count++;
- }
- #endregion
- #region Генерация капчи
-
- Canvas _can; // изначально контейнер Canvas пустой
- // свойтсво, которое отображает созданный контейнер Canvas в UserControl
- public Canvas Can
- {
- get => _can;
- set => this.RaiseAndSetIfChanged(ref _can, value);
- }
- // событие, которое происходит после истечения времени таймера
- private void timer_tick(object sender, EventArgs e)
- {
- CreateCaptha();
- }
- // метод для создания Canvas, внутри которого рандомно генерируются линии и цифры
- public void CreateCaptha()
- {
-
- Random rnd = new Random();
- SolidColorBrush color = new SolidColorBrush(Color.FromRgb(Convert.ToByte(rnd.Next(256)), Convert.ToByte(rnd.Next(255)), Convert.ToByte(rnd.Next(255))));
-
- Canvas canvas = new Canvas() // создаем размеры Canvas
- {
- Width = 400,
- Height = 400,
- Background = color
- };
- // генерируем линии
- for (int i=0; i<3; i++)
- {
- TextBlock number = new TextBlock()
- {
- Text = rnd.Next(10).ToString(),
- FontSize = 150,
- Foreground = Brushes.Black,
- Padding = new Avalonia.Thickness(rnd.Next(100), rnd.Next(50))
- };
- canvas.Children.Add(number);
- }
-
- // генерируем числа
- for (int i=0; i<20; i++) {
- Line line = new Line()
- {
- StartPoint = new Avalonia.Point(rnd.Next(400), rnd.Next(400)),
- EndPoint = new Avalonia.Point(rnd.Next(400), rnd.Next(400)),
- Stroke = Brushes.White,
- StrokeThickness = 3
- };
- canvas.Children.Add(line);
- }
- timer.Start(); // запуск таймера
-
- Can = canvas; // передача созданного Canvas св-ву Canvas для отображения
- }
- #endregion
- }
- }
|