Как передать объект пользовательского элемента управления в контент другого элемента управления? - PullRequest
0 голосов
/ 28 мая 2018

Я делаю игру-змейку в WPF C #, и я создал несколько пользовательских элементов управления для разных «представлений», это означает, что у меня есть MainWindow, который наследуется от класса Window, и несколько пользовательских элементов управления с их файлами xaml.Один пользовательский элемент управления представляет главное меню, другой - представление параметров и т. Д.

public partial class MainWindow: Window
{
    public static Menu menu;
    public MainWindow()
    {
        InitializeComponent();
        menu = new Menu();
        this.Content = menu;
    }
}

, как указано выше, в MainWindow я создаю объект Menu (это один из пользовательских элементов управления - файл класса и файл xaml) и устанавливаю содержимое Window на содержимое Menu.И затем в классе меню я делаю то же самое, например, как пользователь нажимает на кнопку с текстом «параметры», он переходит к параметрам пользовательского управления.Я просто делаю

this.Content = new Options(); //"this" is now menu class

, когда он нажимает кнопку с текстом «одиночная игра», он переходит к пользовательскому управлению с однопользовательской игрой

this.Content = new Game();

и так далее.Таким образом, все работает нормально, я могу переключаться между различными пользовательскими элементами управления и «загружать» разное содержимое в окно приложения, но каждый раз, когда я создаю новый объект, и это проблема.Когда я перехожу к параметрам и затем возвращаюсь в меню, создается новый объект класса меню, я не могу вспомнить предыдущие настройки и т. Д. Я хотел бы создать это только один раз, а затем сослаться на это - загрузить содержимое существующего объекта.Я пытался использовать привязку, но это не работает.Как я могу это сделать?Как я могу переключаться между различными пользовательскими элементами управления без потери данных и каждый раз создавать новый объект?

1 Ответ

0 голосов
/ 28 мая 2018

Вы должны использовать синглетоны .

Синглеты позволяют вам иметь только один экземпляр класса .Таким образом, каждый раз, когда вы манипулируете экземпляром, вы манипулируете одним и тем же.Это позволяет вам сохранять / обновлять состояние одного и того же экземпляра через ваш код.

Это выглядит так, и это потокобезопасно.

public sealed class YourClass
{
    private static readonly YourClass instance = new YourClass();

    /* Explicit static constructor to tell C# compiler
     * not to mark type as beforefieldinit */
    static YourClass()
    {

    }

    private YourClass()
    {

    }

    public static YourClass Instance
    {
        get
        {
            return instance;
        }
    }
}

EDIT :Ошибка OP заключалась в том, чтобы установить содержимое пользовательского элемента управления вместо пользовательского элемента управления MainWindow.Вы можете получить текущее окно, содержащее usercontrol, используя эту строку кода внутри usercontrol.

Window yourParentWindow = Window.GetWindow(this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...