Как остановить, чтобы новое окно открывалось каждый раз? - PullRequest
4 голосов
/ 03 мая 2011

У меня есть приложение WPF, в котором при нажатии на пункт меню открывается окно.Если снова щелкнуть тот же пункт меню, когда окно уже открыто, оно открывает новое окно, но я не хочу, чтобы новое окно открывалось каждый раз.

Что мне нужно, если окноуже открыто, то же окно должно быть сфокусировано, а не новое окно.

Ответы [ 4 ]

4 голосов
/ 25 апреля 2013
//First we must create a object of type the new window we want the open.
NewWindowClass newWindow;

private void OpenNewWindow() {
    //Check if the window wasn't created yet
    if (newWindow == null)
    {
        //Instantiate the object and call the Open() method 
        newWindow= new NewWindowClass();
        newWindow.Show();
        //Add a event handler to set null our window object when it will be closed
        newWindow.Closed += new EventHandler(newWindow_Closed);
    }
    //If the window was created and your window isn't active
    //we call the method Activate to call the specific window to front
    else if (newWindow != null && !newWindow.IsActive)
    {
        newWindow.Activate();
    }
}
void newWindow_Closed(object sender, EventArgs e)
{
    newWindow = null;
}

Я думаю, что это решит вашу проблему.

Атт,

3 голосов
/ 03 мая 2011

Если ваши открытые окна используются в качестве простого диалогового окна, вы можете использовать следующий код

window.ShowDialog();

, когда диалоговое окно покажет, что вы не можете нажимать какие-либо элементы меню, если вы закроете это окно

2 голосов
/ 24 апреля 2012

Подобный подход довольно грубой силы также работает:

        bool winTest = false;

        foreach (Window w in Application.Current.Windows)
        {
            if (w is testWindow)
            {
                winTest = true;
                w.Activate();
            }
        }

        if (!winTest)
        {
            testWindow tw = new testWindow();
            tw.Show();
        }
1 голос
/ 04 мая 2011

Вы можете создать поле и проверить, установлено ли оно:

private Window _dialogue = null;
private void MaekWindowButton_Click(object sender, RoutedEventArgs e)
{
    if (_dialogue == null)
    {
        Dialogue diag = new Dialogue();
        _dialogue = diag;

        diag.Closed += (s,_) => _dialogue = null; //Resets the field on close.
        diag.Show();
    }
    else
    {
        _dialogue.Activate(); //Focuses window if it exists.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...