C #: изменить WindowState главного окна из другого класса - PullRequest
0 голосов
/ 02 января 2019

У меня один класс окна по умолчанию и второй класс, который я вызываю из него. Мне нужно изменить WindowState окна MainWindow из этого второго класса, но когда я пытаюсь сделать это с помощью: MainWindow.WindowState = WindowState.Normal;, это дает мне эту ошибку: An object reference is required for the non-static field, method, of property 'Window.WindowState'.

MainWindow.xaml.cs

namespace Client_Patcher
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

UnminimizeApplicationCommand.cs

namespace Client_Patcher
{
    public class UnminimizeApplicationCommand : ICommand
    {
        public UnminimizeApplicationCommand(WindowState d)
        {
        }

        public bool CanExecute(object parameter)
        {
            throw new NotImplementedException();
        }

        public void Execute(object parameter)
        {
            //Need to change WindowState property of a MainWindow here.
        }

        public event EventHandler CanExecuteChanged;

        event EventHandler ICommand.CanExecuteChanged
        {
            add
            {
                throw new NotImplementedException();
            }

            remove
            {
                throw new NotImplementedException();
            }
        }
    }
}

Также я попытался сделать это:

namespace Client_Patcher
{
    public partial class MainWindow : Window
    {
        public MainWindow AppWindow { get; }

        public MainWindow()
        {
            InitializeComponent();
            AppWindow = this;
        }
    }
}

Который вызывается MainWindow.AppWindow.WindowState = WindowState.Normal; способом, но выдает ту же ошибку. Что такое работа aroud?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Я рекомендую использовать так называемый «контейнер IoC»

Создание статического класса.

 public static IoC
 {
     private static Window _window;
     // The main window instance for your app
     public static Window Window => _window;

     // Here you pass your application's "main" window instance.
     // So all window related intractability happens only from this clas
     public static InitializeDI(Window window)
     {

         _window = window;


}

}

Примечание: Вы действительно должны вызывать этот метод в методе Main(), где ваше приложение запускается

0 голосов
/ 02 января 2019

Эта ошибка возникает из-за того, что вы воспринимаете MainWindow как статический объект.Но на самом деле это не так.Имея это в виду и теперь при повторном чтении сообщения об ошибке, вы поймете, что оно точно информирует вас об этой проблеме.Чтобы решить эту проблему, попробуйте

Application.Current.MainWindow.WindowState = WindowState.Normal;

внутри вашего Выполнить обратный вызов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...