#c# #wpf #method-call
#c# #wpf #метод-вызов
Вопрос:
Это кажется выполнимым, но по какой-то причине правильный способ мне не приходит в голову. Я новичок в C # и .NET, поэтому надеюсь, что это не смешной вопрос 🙂
Комментарии:
1. Я думаю, что просмотр части вашего кода (даже если он не работает) поможет дать релевантный ответ.
2. Иногда статические методы или свойства могут удовлетворить ваши потребности. msdn.microsoft.com/en-us/library/79b3xss3 (VS.80).aspx
Ответ №1:
Не уверен, зачем вам это нужно. Это не похоже на лучший дизайн, но, не зная деталей того, что вы делаете, я не могу это комментировать. Вот как это можно сделать:
В App.Xaml.cs:
var main = App.Current.MainWindow as MainWindow; // If not a static method, this.MainWindow would work
main.MyFunction();
Обратите внимание, что вам придется сделать это после запуска. Если вы хотите сделать это перед запуском, вам нужно будет создать MainWindow
объект и назначить его this.MainWindow
:
var window = new MainWindow();
this.MainWindow = window;
window.Show();
window.MyFunction();
Комментарии:
1. спасибо за помощь. Я действительно хотел использовать метод во время запуска для установки значений.
2. После этого вы можете продолжить и очистить
StartupUri
свойство из файла App.xaml. Эти строки кода переопределяют ее.
Ответ №2:
Приятно видеть, что кто-то начинает! Продолжайте в том же духе, вы обнаружите, что язык является мощным, и в конечном итоге вы увидите методологии проектирования, которые они предполагают использовать при написании кода.
Я могу назвать только несколько обстоятельств, при которых вы могли бы захотеть сделать такую вещь.
1) Вызов некоторой функции, независимой от окна:
Если ваш код не зависит от вашего MainWindow и не ссылается на него, может быть, вам следует переместить его из файла кода MainWindow и поместить куда-нибудь еще? У вас может быть столько cs-файлов, сколько вы хотите, поэтому не торопитесь и все упорядочивайте. Позже вы будете рады, что сделали это.
2) Выполнение некоторой задачи инициализации в окне после его загрузки:
В коде вашего окна вставьте свой код после вызова InitializeComponent() в конструкторе. (Это метод, у которого нет возвращаемого типа, это просто «public MainWindow() {«
Помните, что вы можете добавлять параметры в свой конструктор, когда вам нужно что-то передать. В конструкторе без параметров по умолчанию, который создает Visual Studio, нет ничего волшебного. Возможно, таким образом вам удастся избежать создания большого количества запутанного кода. Обычно лучше выполнять инициализацию в коде окна, а не загружать само окно,
3) Получение некоторых простых данных в окне или из него
Вы уже научились создавать пользовательские свойства? Это действительно просто.
Комментарии:
1. спасибо за совет! Никакие 2 и 3 не имеют отношения к делу, и ваш совет очень полезен в решении моей проблемы. В итоге я фактически перенес некоторый код из моего MainWindow в App.cs, чтобы это сделать. У меня есть несколько экземпляров MainWindow, поэтому отдельные свойства не помогли, однако я выяснил, что могу использовать свойство коллекции строк. Я превращаю значения каждого экземпляра в одну строку и использую коллекцию для хранения и извлечения во время запуска и завершения работы. Я ценю помощь, Ники