0

Интересует, возможно ли заменить ((window.Content as Grid).Children[0] as Button).Click += OnClick; на что то, непосредственно в коде объявления кнопки

using System.Windows;
using System.Windows.Controls;

namespace SimpleGame { public class MainFrame : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e);

        Window window = new Window()
        {
            Title = "SimpleGame",
            Width = 1024,
            Height = 768,
            Content = new Grid()
            {
                Tag = "grid",
                Children =
                {
                    new Button()
                    {
                        Tag = "StarGame",
                        Content = "Start Game",
                        VerticalAlignment = VerticalAlignment.Center,
                        HorizontalAlignment = HorizontalAlignment.Center
                        //например сюда что то вроде
                        // Click += OnClick не работает
                    }
                }
            }
        };
        ((window.Content as Grid).Children[0] as Button).Click += OnClick;
        window.Show();
    }

    void OnClick(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Test");
    }
}

}

Jlekcop
  • 1
  • 1
  • У вас вообще не должно быть этого кода в WPF проекте. Где привязки? Где XAML? – EvgeniyZ Aug 18 '21 at 12:33
  • XAML не является обязательным для WPF - Пруф, хотя если подскажете, как сделать динамически поле 25*25(625) кнопок с паттерном MVVM, буду благодарен, так как с биндингами не очень дружу – Jlekcop Aug 18 '21 at 12:46
  • @Jlekcop XAML не является обязательным для WPF - по рельсам тоже не обязательно ездить на поезде, можно пешком. Хотите поле игровое в MVVM - пожалуйста, вот еще, и на закуску. Я думаю, нет смысла пилить пример, разберетесь же с тем что есть? – aepot Aug 18 '21 at 12:59
  • @Jlekcop И что показывает ваш "пруф"? То, что можно? Да, можно. Но задайте тогда себе вопрос: а зачем вообще вы сидите на WPF? Идите вон WinForms используйте, там контролы в коде лепить в порядке вещей (и то, от этого уже давно люди отошли). WPF вам дает мощнейший инструментарий в виде XAML разметки, а вы его просто игнорируете. Хорошо это? Ну, решать вам, если для вас это норма - дерзайте. Только потом не жалуйтесь на потери производительности, на кашу в коде и так далее. Примеры вам дали выше, могу еще добавить этот. Все зависит от ваших задач. – EvgeniyZ Aug 18 '21 at 13:04
  • 1
    @Jlekcop Касательно вашего вопроса, в C#, подписка на события не задается при инициализации, она задается уже для готового объекта. Вынесите Button отдельно, как var button = new Button(){...}; и подпишитесь на что вам надо button.Click += OnClick;, ну а в Children заносите ссылку на ранее созданный объект (Children = { button }). Но повторюсь - этому не место в WPF! – EvgeniyZ Aug 18 '21 at 13:08
  • @EvgeniyZ, Спасибо за ответ, его и искал, а по поводу "WPF вам дает мощнейший инструментарий в виде XAML разметки" я же не спорю, но вы тоже его на седьмой день освоили? – Jlekcop Aug 18 '21 at 13:14
  • 1
    @Jlekcop Знаете, я когда только начал изучать C#, сразу полез в декстоп программирование, выбрав сразу себе WPF. И не поверите, я не обходил стороной XAML, я писал там нужные мне контролы и обращался к ним через код (по именам), да, я не знал тогда что такое привязки, но четко понимал для чего нужен XAML и где создавать все кнопочки. Так что для меня до сих пор является большой загадкой: почему люди, используя WPF, всячески обходят стороной очевидную вещь по типу XAML. Да я даже больше скажу, создавать контролы через код - сложнее. Короче, учитесь сразу правильным вещам, а не ищите "пруфы". – EvgeniyZ Aug 18 '21 at 13:23
  • 1
    XAML - ужасен и чудовищен. Обратите внимание: это критика замла, а не WPF! Но есть альтернативы. Например, AMMY. Обсуждение можно почитать здесь – Alexander Petrov Aug 18 '21 at 14:47
  • @AlexanderPetrov AMMY сделано умныии фронтендерами, кто всю жизнь пилил вьюхи под JS фреймворки. А XAML норм, он богаче и удобнее JSON'а. Но на вкус и цвет... – aepot Aug 18 '21 at 18:17

0 Answers0