Приложение Wpf - Как сохранить и загрузить экран, на котором находится приложение - PullRequest
2 голосов
/ 01 декабря 2011

Я просмотрел переполнение стека и увидел несколько сообщений, которые почти решают эту проблему, но не совсем.Чтобы быть точным, я имею в виду приложение, которое развернуто для пользователей, у которых может быть 3 или 4 дисплея, и приложение хотело бы вспомнить, к какому из них перейти при запуске.

У меня есть приложение WPF, и яхотите сохранить то, на каком экране он был, когда форма выполняет OnClose.Затем при загрузке я хочу разместить свое приложение на этом экране.

Как это можно сделать (без хакерских вызовов Win32 API)?

РЕДАКТИРОВАТЬ: В предыдущем посте StackO кто-то упоминал, что что-то делаетнапример:

var screen = System.Windows.Forms.Screen.FromRectangle(
  new System.Drawing.Rectangle(
    (int)myWindow.Left, (int)myWindow.Top, 
    (int)myWindow.Width, (int)myWindow.Height));

Когда у меня есть screen, кажется, что единственное, что я могу сделать, это проверить, находится ли приложение на основном экране или нет.Что хорошо ... если у моих пользователей только два экрана, но не хорошо, если у них 3+.Есть ли что-то лучшее, что я могу сделать с этим результирующим объектом screen, чем просто проверить, является ли он первичным.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Более подробную информацию о нескольких мониторах можно получить из свойства Screen.AllScreens

http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.allscreens.aspx

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

1 голос
/ 01 декабря 2011

Ранее я делал это с помощью класса ViewManager, пользовательского файла конфигурации XML и MVVM. По сути, когда вызывается OnClose, класс ViewManager (пользовательский класс, который на самом деле просто содержит коллекцию также пользовательских экземпляров ViewInfo) опрашивается, чтобы выяснить, какие представления открыты в данный момент и в каком порядке (как они могут быть вставлены с помощью Ctrl +). Tab) и какой идентификатор записи был отображен; это приложение использовало Entity Framework для доступа к данным базы данных, каждое представление приложения сопоставлялось либо с набором записей, либо с одной записью определенного типа.

В любом случае вывод XML будет содержать имя представления, приложения (в приложении было несколько частей, которые я называл приложениями внутри), которому оно принадлежит, информацию о загруженной записи и т. Д.

После загрузки программы единственным представлением, которое загружается автоматически, является HomeView, который потенциально содержит все другие представления. ViewManager проверяет файл XML и загружает представления на основе его содержимого. Это действие можно отключить на экране параметров, чтобы при входе пользователям было предоставлено чистое рабочее пространство, если они захотят.

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