/
Vagabond132
/
TerrariaCourse
Обзор
Документация
Войти
/
Vagabond132
/
TerrariaCourse
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
Tests
WpfView/Menu/ViewInputNameMenuWpf.cs
203 строки
6 KB
Vagabond132
Комментарии добавлены
12 янв 2025, 15:06
12 янв 2025, 15:06
bb8abcd
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using View.Menu; namespace WpfView.Menu { /// <summary> /// Представление меню ввода для WPF /// </summary> public class ViewInputNameMenuWpf : ViewMenu { /// <summary> /// Счет набранный игроком /// </summary> private int _score; /// <summary> /// Надпись для заголовка /// </summary> private Label _labelHeader; /// <summary> /// Текстовый блок /// </summary> private TextBlock _textBlock = new TextBlock(); /// <summary> /// Поле для ввода имени игрока /// </summary> private TextBox _textBoxInput = new TextBox(); /// <summary> /// Очки игрока, которые отображаются в меню. /// </summary> public int Score { get => _score; set => _score = value; } /// <summary> /// Имя нового игрока /// </summary> public string NamePlayer { get => _textBoxInput.Text; } /// <summary> /// Делегат нажатия на кнпоку /// </summary> public delegate void dKeyPressed(object sender, KeyEventArgs args); /// <summary> /// Событие нажатия на кнопку /// </summary> public event dKeyPressed OnKeyPressed; /// <summary> /// Событие для подтверждения имени игрока /// </summary> public event Action<string> OnPlayerNameConfirmed; /// <summary> /// Панель /// </summary> private Panel _parentControl; /// <summary> /// Конструктор отображения /// </summary> /// <param name="parMenu">Меню</param> /// <param name="parParentControl">Панель</param> public ViewInputNameMenuWpf(Model.Menu.Menu parMenu, Panel parParentControl) : base(parMenu) { ApplicationWindow.GetWindow().Dispatcher.Invoke(() => { if (parParentControl == null) { _parentControl = new StackPanel(); } else { _parentControl = parParentControl; } _labelHeader = new Label(); Init(); Draw(); }); } /// <summary> /// Конструктор отображения /// </summary> /// <param name="parMenu">Меню</param> public ViewInputNameMenuWpf(Model.Menu.Menu parMenu) : this(parMenu, null) { } /// <summary> /// Инициализация /// </summary> private void Init() { // Существующая инициализация Window window = ApplicationWindow.GetWindow(); window.Width = 800; window.Height = 600; window.Content = null; _parentControl.Children.Clear(); _parentControl.VerticalAlignment = VerticalAlignment.Stretch; _parentControl.HorizontalAlignment = HorizontalAlignment.Stretch; _parentControl.Children.Add(_labelHeader); // Текстовый блок //_parentControl.Children.Add(_textBlock); // Поле ввода имени _textBoxInput.Margin = new Thickness(10); _textBoxInput.FontSize = 16; _textBoxInput.HorizontalAlignment = HorizontalAlignment.Center; _textBoxInput.Width = 200; _parentControl.Children.Add(_textBoxInput); // Добавляем кнопку подтверждения var confirmButton = new Button { Margin = new Thickness(10), FontSize = 1, HorizontalAlignment = HorizontalAlignment.Center, Width = 0 }; confirmButton.Click += (sender, args) => { // Вызов события при нажатии на кнопку OnPlayerNameConfirmed?.Invoke(_textBoxInput.Text.Trim()); }; _parentControl.Children.Add(confirmButton); // Элементы меню foreach (ViewMenuItem item in Menu) { ((ViewMenuItemWpf)item).SetParentControl(_parentControl); } window.Content = _parentControl; window.Show(); } /// <summary> /// Нарисовать /// </summary> public override void Draw() { ApplicationWindow.GetWindow().Dispatcher.Invoke(() => { DrawTitle(); foreach (ViewMenuItem item in Menu) { item.Draw(); } }); } /// <summary> /// Нарисовать заголовок /// </summary> protected virtual void DrawTitle() { _labelHeader.Content = "Введите имя игрока"; _labelHeader.FontSize = 24; _labelHeader.Foreground = new SolidColorBrush(Colors.Orange); _labelHeader.Height = 40; _labelHeader.Margin = new Thickness(0, 180, 0, 0); _labelHeader.VerticalContentAlignment = VerticalAlignment.Top; _labelHeader.HorizontalAlignment = HorizontalAlignment.Center; } /// <summary> /// Создать отображение пункта меню /// </summary> /// <param name="parMenuItem">Пункт меню</param> /// <returns></returns> protected override ViewMenuItem CreateItem(Model.Menu.MenuItem parMenuItem) { return new ViewMenuItemWpf(parMenuItem); } /// <summary> /// Перерисовать /// </summary> protected override void NeedRedraw() { Draw(); } } }