Манипуляции с окнами и контроль над ними - PullRequest
0 голосов
/ 05 июня 2010

В моем приложении только 2 окна - win_a & win_b, в каждом из этих окон есть кнопка, которая вызывает другое окно, например, клик по btn1 из win_a вызовет win_b, клик по btn2 из win_b покажет win_a.

Желаемое поведение: 1. Одновременно представлен только один экземпляр объекта, например, ситуация, когда 2 экземпляра win_a, запущенных одновременно, не разрешены.

  1. Когда вы нажимаете на кнопку, которая вызывает уже существующие окна, это действие изменит только фокус на нужное окно.

  2. Если вы вызываете окно, которое было создано ранее, но после того, как оно было закрыто, это действие создаст новый экземпляр этого окна. Например. Есть 2 запущенных окна. Вы закрываете один из них и после попытки вызвать это окно обратно, поэтому соответствующая кнопка создаст его.

Как написать это в WPF (XAML + C #). На данный момент я написал версию, которая может создавать множество экземпляров одного и того же окна (контроль количества экземпляров не реализован), но я хочу видеть только один экземпляр одного и того же окна, как мы видим его во многих приложениях .

Пример моего кода:

Window win = new Window();
win.Show();

Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 июня 2010

Я бы предложил другой подход:

  1. создать одноэлементный класс, содержащий список кортежей List>

  2. при создании окон вы можете проверить, находится ли окно в коллекции или нет.

    если коллекция содержит окно, вы можете установить его activ win.Activate (), иначе вы можете создать его и добавить ссылку на коллекцию list.add (tuple (win, "windowA"))

3. Наконец, в окнах, которые вы можете добавить в коллекцию, при закрытии необходимо удалить окно из списка синглетонов, вы можете сделать это, обработав событие Close окна

У меня нет кода, который я написал здесь, но я надеюсь, что это поможет.

0 голосов
/ 06 июня 2010

сначала вам нужно 2 ссылки на каждое другое окно. по нажатию кнопки вам нужно проверить одну ссылку. скажи в win_a

//win_b is a member on Windows_a class
if(_win_b.IsVisible())
{
// set focus on it
}
else
{
//show win_b
}

сделать то же самое для windows_b

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