/
Landilf
/
2413_Ryumin_CourseWork
Обзор
Документация
Войти
/
Landilf
/
2413_Ryumin_CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
project
CourseWork/GUI/Views/PauseMenuView.axaml.cs
82 строки
3 KB
Landilf
add project
27 янв 2026, 13:57
27 янв 2026, 13:57
753b3e7
Код
Авторство
О чём код?
using Avalonia; using Avalonia.Controls; using Avalonia.Media; using GUI.ViewModels; using System.Globalization; using GameCore; namespace GUI.Views; public partial class PauseMenuView : UserControl { /// <summary> /// Конструктор. /// </summary> public PauseMenuView() { InitializeComponent(); } /// <summary> /// Обработчик смены DataContext. /// </summary> /// <param name="parEventArgs">Аргументы события.</param> protected override void OnDataContextChanged(EventArgs parEventArgs) { base.OnDataContextChanged(parEventArgs); if (DataContext is PauseMenuViewModel vm) { vm.PropertyChanged += (s, e) => InvalidateVisual(); } } /// <summary> /// Отрисовывает меню паузы. /// </summary> /// <param name="parContext">Контекст рисования.</param> public override void Render(DrawingContext parContext) { base.Render(parContext); if (DataContext is not PauseMenuViewModel vm) { return; } parContext.DrawRectangle(new SolidColorBrush(Color.Parse(GameConfig.COLOR_MAP_EMPTY)), null, Bounds); double centerX = Bounds.Width / 2; var brush = new SolidColorBrush(Color.Parse("#D93025")); // Подготовка заголовка для расчета высоты var title = new FormattedText("ПАУЗА", CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface("Arial", FontStyle.Normal, FontWeight.Bold), 40, brush); // Расчет общей высоты контента (заголовок + отступ + кнопки) double titleMargin = 60; double totalHeight = title.Height + titleMargin + (vm.MenuItems.Count * 60 - 10); // 60 - это 50 (высота кнопки) + 10 (отступ) double currentY = (Bounds.Height - totalHeight) / 2; // Отрисовка заголовка parContext.DrawText(title, new Point(centerX - title.Width / 2, currentY)); currentY += title.Height + titleMargin; // Отрисовка кнопок for (int i = 0; i < vm.MenuItems.Count; i++) { var item = vm.MenuItems[i]; bool isSelected = i == vm.SelectedIndex; var rect = new Rect(centerX - 150, currentY + i * 60, 300, 50); if (isSelected) { parContext.DrawRectangle(new SolidColorBrush(Color.Parse("#F4CCCC")), new Pen(new SolidColorBrush(Color.Parse("#EA9999")), 2), rect); } else { parContext.DrawRectangle(null, new Pen(new SolidColorBrush(Color.Parse("#EA9999")), 1), rect); } var text = new FormattedText(item.Title, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface("Arial", FontStyle.Normal, isSelected ? FontWeight.Bold : FontWeight.Normal), 24, brush); parContext.DrawText(text, new Point(centerX - text.Width / 2, rect.Y + (rect.Height - text.Height) / 2)); } } }