(Silverlight OOB) Как получить нормальную ширину и высоту главного окна, чтобы сохранить и восстановить их

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

Я пытаюсь сохранить такие настройки (на Application_Exit):

IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
Window mainWindow = Application.Current.MainWindow;

appSettings["WindowTop"] = mainWindow.Top;
appSettings["WindowLeft"] = mainWindow.Left;
appSettings["WindowWidth"] = mainWindow.Width;
appSettings["WindowHeight"] = mainWindow.Height;
appSettings["WindowState"] = (UInt32)mainWindow.WindowState;

Плохо то, что когда приложение развернуто, этот код сохраняет ширину, высоту, левую и верхнюю часть развернутого окна, а не нормальный размер / положение (до максимизации).

Могу ли я получить где-нибудь нормальный размер и положение окна?

Если у меня будут эти значения в Application_Startup, я могу установить нормальный размер / положение, а затем установить WindowState, чтобы положение окна было правильно восстановлено после возврата из развернутого состояния.


person Andrew    schedule 12.09.2010    source источник


Ответы (1)


В вашем случае я бы подключил событие SizeChanged к вашему корневому элементу и на основе WindowState я бы сохранил новый размер окна или проигнорировал его, если окно развернуто.

person Denis    schedule 12.09.2010
comment
А как насчет изменения положения окна без изменения размера? Я также хочу сохранить верхнее / левое положение главного окна. - person Andrew; 13.09.2010
comment
Класс Window в silverlight имеет очень ограниченную функциональность. В настоящее время я не могу придумать никакого способа узнать, когда изменилось положение окна. Вы можете проверять свойства Top / Left каждые x секунд с помощью DispatcherTimer, но это довольно неэлегантное решение. - person Denis; 13.09.2010