Wpf как открыть окно на втором мониторе
Я использую Windows 8.1, которая имеет гораздо лучшую поддержку нескольких мониторов, чем Windows 7 (вроде). Однако, когда я нахожусь в полноэкранном приложении на одном мониторе, и я захожу в меню «Пуск» на другом мониторе и открываю настольное приложение, оно открывается на противоположном мониторе, потому что оно используется в тот последний раз, когда приложение использовалось ,
Это приостанавливает полноэкранное приложение и переключается в режим рабочего стола на этом мониторе. Затем мне нужно перетащить настольное приложение на другой монитор, на котором у меня не было указателя мыши, а затем переключиться обратно на полноэкранное приложение на этом мониторе, перейдя в правый верхний угол.
Это невероятно раздражает, каждый раз, когда я подключаю свой ноутбук ко второму монитору и пытаюсь его использовать, такое случается. Не говоря уже о том, что у меня на втором мониторе есть Netflix или любой другой вид видео, и он просто случайно перестает воспроизводиться, когда я пытаюсь работать на другом экране.
Скорее всего, для этого нужно установить стороннее приложение, верно? Я бы действительно предпочел, чтобы это было бесплатно, поскольку это было менее раздражающим в Windows 7, когда приложение открывалось только поверх другого, который был на этом мониторе. Это одна из двух раздражающих вещей, которые мне не нравятся в Windows 8/8.1. Все остальное фантастическое, если честно.
После экспериментов с ярлыками в ответе Codezilla, если вы нажмете Windows+Shift+ клавиши со стрелками, вы мгновенно перейдете на другой экран.
В случае, если все вышеперечисленные решения не помогли, пометьте монитор, для которого вы хотите открыть приложение, как Основной дисплей
Шаги: Настройки дисплея - Несколько дисплеев - Сделать это моим основным дисплеем
Я попытался это успешно:
С этого момента, он должен открываться каждый раз на мониторе вашего предпочтения.
Я не уверен, что можно изменить положение по умолчанию, кроме закрытия приложения на экране, на котором вы хотите, чтобы оно появилось, а затем, когда вы снова откроете его, оно "может" появиться на правом экране.
Это не всегда так, поскольку некоторые приложения были запрограммированы для загрузки определенным образом. Тем не менее, в качестве более быстрого способа перемещения элементов с одного экрана на другой, я использую ярлык, который ускоряет перетаскивание объектов с помощью мыши. Если у вас в фокусе приложение, которое вы хотите переместить (если вы только что открыли его и не щелкали в других местах, оно будет в фокусе). Удерживая нажатой клавишу Windows, используйте курсоры, чтобы переместить окно туда, где вы хотите.
Если он находится на левом мониторе, и вы хотите, чтобы он находился справа, удерживайте нажатой клавишу Windows + нажмите клавишу со стрелкой вправо, и он будет перемещаться по экрану. В зависимости от того, в каком состоянии находится окно (полноэкранное / оконное), может зависеть от того, сколько нажатий клавиш требуется для его перемещения, но вы можете поиграть с ним, чтобы почувствовать, что делают нажатия клавиш.
Если ваша программа - игра, созданная в Unity (скомпилированная с поддержкой этой опции), вы можете запустить ее один раз с параметром -show-screen-selector и выбрать правильный монитор.
В Visual Studio можно настроить расположение, размер и поведение окон, что позволит создать макеты окон, оптимально подходящие для различных рабочих процессов разработки. После того как макет будет настроен, интегрированная среда разработки запомнит его. Например, если после изменения места прикрепления окна обозревателя решений закрыть Visual Studio, во время следующего открытия Visual Studio окно обозревателя решений будет закреплено в том же месте, даже если работа будет продолжена на другом компьютере.
Можно также присвоить настраиваемому макету имя, сохранить его, а затем переключаться между макетами с помощью одной команды. Например, можно создать один макет для редактирования, а другой — для отладки и переключаться между ними с помощью команды меню Окно > Применить макет окна.
Окна инструментов и документов
В среде IDE существует два основных типа окон: окна инструментов и окна документов. В число окон инструментов входят обозреватель решений, обозреватель сервера, окно вывода, список ошибок, конструкторы, окна отладчика и т. д. Окна документов содержат файлы исходного кода, произвольные текстовые файлы, файлы конфигурации и т. д. Изменять размер и перетаскивать окна инструментов можно с помощью их строки заголовка. Перетаскивание окон документов осуществляется с помощью вкладки. Правой кнопкой мыши щелкните вкладку или строку заголовка, чтобы задать другие параметры для окна.
В меню Окно находятся параметры закрепления, перемещения и скрытия окон в интегрированной среде разработки. Щелкните правой кнопкой мыши вкладку или строку заголовка окна, чтобы просмотреть дополнительные параметры для этого конкретного окна. Одновременно можно отображать несколько экземпляров окон инструментов. Например, можно открыть несколько окон веб-браузера. Кроме того, можно создать дополнительные экземпляры некоторых окон инструментов, выбрав команду Создать окно в меню Окно .
Разделение окон
Если в документе необходимо одновременно просмотреть или изменить два различных места, можно разделить окна. Чтобы разделить документ на две части с независимой прокруткой, выберите Разделить в меню Окно . Чтобы восстановить единое представление, выберите Снять разделение в меню Окно .
Вкладки
С помощью вкладок вы можете размещать макеты различными способами. Например, можно предварительно просматривать файл в редакторе, не открывая файл, группировать вкладки и выполнять многие другие задачи.
Вкладка предварительного просмотра (окна документов)
На вкладке Предварительный просмотр можно просматривать файлы в редакторе, не открывая их. Просмотреть файлы можно путем их выбора в обозревателе решений, во время отладки при заходе в файлы, с помощью команды Перейти к определению, а также при просмотре результатов поиска. Файлы для предварительного просмотра отображаются на вкладке в правой части вкладки документа. Файл становится доступным для редактирования при его изменении или выборе команды Открыть.
Вертикальные вкладки документов
Новые возможности в версии 16.4. В выпуск Visual Studio 2019 версии 16.4 мы добавили одну из наиболее часто запрашиваемых функций — вертикальные вкладки документов. Теперь вы можете управлять вкладками документов в вертикальном списке в левой или правой части редактора.
Вертикальные вкладки документов можно применить следующими способами:
Последовательно выберите элементы Средства > Параметры > Среда > Вкладки и окна в строке меню. Затем в раскрывающемся списке Задать макет вкладки выберите элемент Сверху, Слева или Справа.
Щелкните вкладку правой кнопкой мыши, выберите команду Задать макет вкладки и щелкните элемент Слева или Справа (чтобы вернуть вкладки в расположение по умолчанию, выберите элемент Сверху).
Группы вкладок
Группы вкладок расширяют возможности управления ограниченной рабочей областью при работе с двумя или более открытыми документами в интегрированной среде разработки. Несколько окон документов и окон инструментов можно упорядочить в вертикальные или горизонтальные группы вкладок и затем без труда переносить документы из одной группы в другую.
Панели инструментов
Вы можете разместить панели инструментов требуемым образом, перетащив их в нужное расположение, или используя диалоговое окно Настройка. Дополнительные сведения о размещении и настройке панелей инструментов см. в статье Практическое руководство. Настройка меню и панелей инструментов.
Размещение и закрепление окон
Окно документов или окно инструментов можно закрепить, чтобы задать для них расположение и размер в рамках окна среды IDE. Либо вы можете сделать эти окна плавающими, то есть независимыми от IDE.
Окно инструментов можно закрепить в любом расположении в пределах фрейма IDE. Вы можете закрепить некоторые окна инструментов в виде окон с вкладками в фрейме редактора. Также вы можете закрепить окна документов в пределах фрейма редактора либо в текущем расположении в последовательности перехода.
Кроме того, можно закрепить несколько окон для совместного перемещения в среде IDE или за ее пределами. Окна инструментов можно скрывать или сворачивать.
Существуют следующие способы размещения окон.
Закрепление окон документов в левой части вкладки.
Прикрепление окон в виде вкладок к области редактирования.
Закрепление окон инструментов по краю области интегрированной среды разработки.
Перемещение окно документов или окно инструментов по интегрированной среде разработки или за ее пределами.
Скрытие окон инструментов вдоль края интегрированной среды разработки.
Отображение окон на разных мониторах.
Сброс расположения окон до макета по умолчанию или до сохраненного настраиваемого макета.
Чтобы расположить окна инструментов и документов, поместите указатель в строку заголовка окна и перетащите его в нужное расположение. Также можно щелкнуть заголовок окна правой кнопкой мыши, чтобы использовать его контекстное меню, либо применить команды в меню Окно.
Закрепление окон
При щелчке и перетаскивании строки заголовка окна инструмента или вкладки окна документа появляется маркер в виде ромба. Во время операции перетаскивания, когда указатель мыши наведен на одну из стрелок в ромбе, будет отображена затененная область, показывающая место закрепления окна после отпускания кнопки мыши.
Чтобы переместить закрепляемое окно без прикрепления к месту, во время перетаскивания окна нажмите клавишу CTRL.
Чтобы вернуть окно инструмента или окно документа в последнее место закрепления, нажмите клавишу CTRL во время выполнения двойного щелчка по заголовку или вкладке окна.
На следующем рисунке показан маркер в виде ромба для окон документов, которые могут быть закреплены только в рамках области редактирования.
Окна инструментов можно прикрепить к одной стороне рамки в интегрированной среде разработки или в пределах области редактирования. Маркер в виде ромба появляется при перетаскивании окна инструмента в другое место и упрощает процесс закрепления.
На следующем рисунке показан обозреватель решений, закрепленный в новом месте, выделенном синим цветом:
Закрытие и автоматическое скрытие окон инструментов
Чтобы закрыть окно инструментов, нажмите кнопку X в верхнем правом углу заголовка окна. Для повторного открытия окна используйте соответствующее сочетание клавиш или команду меню. Окна инструментов поддерживают возможность автоматического скрытия, позволяющую выводить окно из поля зрения при использовании другого окна. Если окно автоматически скрыто, его имя отображается на вкладке на краю интегрированной среды разработки. Для повторного использования окна наведите указатель на вкладку, в результате чего окно возвращается обратно в представление.
Окна инструментов, для которых включена функция автоматического скрытия, могут временно становиться видимыми, когда они находятся в фокусе. Чтобы снова скрыть окно, выберите элемент за пределами текущего окна. При потере фокуса окно скрывается.
Использование второго монитора
Если имеется второй монитор, который поддерживается операционной системой, можно выбрать, в каком мониторе будет отображаться окно. Можно даже сгруппировать несколько окон в блоки на других мониторах.
Можно создать несколько экземпляров обозревателе решений и переместить их на другой монитор. Щелкните окно правой кнопкой мыши и выберите команду Создать представление обозревателя решений. Все окна можно вернуть на исходный монитор, щелкнув их дважды, удерживая нажатой клавишу CTRL.
Сброс, задание имен и переключение между макетами окон
Для возвращения исходного макета окон интегрированной среды разработки используется команда Сбросить макет окон . При запуске этой команды выполняются следующие действия.
Все окна перемещаются в расположения по умолчанию.
Окна, которые закрыты в макете по умолчанию, закрываются.
Окна, которые открыты в макете по умолчанию, открываются.
Создание и сохранение пользовательских макетов
Visual Studio позволяет сохранять до 10 пользовательских макетов окон и быстро переключаться между ними. В приведенных ниже инструкциях показано, как создавать, сохранять, вызывать пользовательские макеты, использующие несколько мониторов как с закрепленными окнами средств, так и с перемещаемыми, а также управлять ими.
Сначала создайте тестовое решение с двумя проектами, каждый с отдельным оптимальным макетом.
Создание проекта пользовательского интерфейса и настройка макета
Если у вас несколько мониторов, переместите окна Обозреватель решений и Свойства на второй монитор. В системе с одним монитором закройте все окна, кроме окна конструктора.
Нажмите клавиши CTRL+ALT+X, чтобы отобразить окно Панель элементов. Если окно закреплено, перетащите его в нужное место.
Нажмите клавишу F5, чтобы включить в Visual Studio режим отладки. Настройте расположение окон отладки Автоматические, Стек вызовов и Выходные данные. Макет, который вы собираетесь создать, применит к ним режим редактирования и режим отладки.
Когда макеты будут открыты в режиме отладки и редактирования, выберите Окно > Сохранить макет окна. Назовите этот макет "Конструктор".
Обратите внимание, что новому макету назначается сочетание клавиш из зарезервированного списка CTRL+ALT+1. 0.
Создание проекта и макета базы данных
Добавьте в решение новый проект База данных SQL Server .
Щелкните правой кнопкой мыши новый проект в обозревателе решений и выберите пункт Просмотр в обозревателе объектов. Отобразится окно Обозреватель объектов SQL Server , в котором можно открывать таблицы, представления и другие объекты в базе данных. Это окно можно переместить или оставить закрепленным. Настройте другие окна средства. Для реалистичности можно добавить существующую базу данных, но это необязательно для данного пошагового руководства.
После настройки макета выберите в главном меню пункт Окно > Сохранить макет окна. Назовите этот макет "Проект базы данных". (Для этого проекта не будет использоваться макет в режиме отладки.)
Переключение между макетами
Для переключения между макетами используйте сочетания клавиш или выберите в главном меню пункт Окно > Применить макет окна.
После применения макета пользовательского интерфейса обратите внимание на то, как выглядит макет в режиме редактирования и в режиме отладки.
Если у вас установлено несколько мониторов на работе и один ноутбук дома, можно создать макеты, оптимизированные для всех компьютеров.
Если макет для нескольких мониторов применить в системе с одним монитором, плавающие окна на втором мониторе будут находиться за окном Visual Studio. Эти окна можно переместить на передний план, нажав клавиши ALT+TAB. Если позже открыть Visual Studio в системе с несколькими мониторами, можно восстановить окна в указанных расположениях, повторно применив макет.
Управление макетами и перемещение их
Пользовательский макет можно удалить, переименовать или переупорядочить. Для этого последовательно выберите элементы Окно > Управление макетами окон. Если переместить макет, привязка ключей будет настроена автоматически и отобразит новое положение в списке. Привязки нельзя изменить другим способом. Таким образом, одновременно можно хранить не больше 10 макетов.
Чтобы вспомнить, какие сочетания клавиш назначены макетам, выберите Окно > Применить макет окна.
Эти макеты автоматически передаются между выпусками Visual Studio, между экземплярами Blend на отдельных компьютерах и из любого выпуска Express в любую другую организацию Express. Но макеты нельзя перемещать между Visual Studio, Blend и Express.
Дано
WPF-Приложение и комп с 2-мя мониторами с разным разрешением (e.g. 2560х1440) и (1920х1080).
Задача
В зависимости от текущего монитора использовать максимально доступную область для главного окна приложения.
К сожалению получение информации о подключенных мониторах доступно для Windows Forms и не доступно для WPF.
При невозможности использования Windows Forms можно использовать p-invoke для доступа к системным функциям User32.dll.
И внешние методы>
Пишем вспомогательный метод для получения хендл монитора из хендла окна>
И собственно функцию которая будет нами использована в приложении для установки размера и положения окна>
Как мы видим размер и положение окна будет производиться только при условии что окно активировано и возможно получить хендла окна из обькта window.
Опытным путем было выяснено что очень важно вызвать SetWindowDimensions в правильном месте в правильное время. В зависимости от настроек системы и того
на каком монитире мы стартуем наше приложение , мы можем получить не тот монитор на котором приложение окончательно будет отображено.
Например, мы стартуем приложение на втором мониторе и второй монитор будет корректно возвращаться нам как текущий монитор при>
- Инициализации проложения (Application_Startup)
- Главное окно приложения загружено (Loaded)
- Главное окно приложения активировано (OnActivated)
Но после этого при дальнейшей инициализации (загрузка подконтролов) внезапно получим первый монитор как текущий вместо ожидаемого второго.
Так что выбор места для вызова SetWindowDimensions очень важен, по крайней мере в моем случае ето было именно так.
Возможно ето не всегда так и SetWindowDimensions спокойно можно вызывать скажем когда главное окно приложения активировано.
Может просто через диспатчер с нужным приоритетом запустить это? А не городить код в событиях.
На Render там или Input приоритет
я это точно не решу (
>Может просто через диспатчер с нужным приоритетом >запустить это?
Определить место где ето нужно сделать не входило в задачу нужно было сделать быстро и вчера.
У вас 2-3 монитора, на одном браузер и редактор кода, на втором мануал, на третьем почта, вы рассортировали окна как нужно. Далее пошли налить чашечку кофе, монитор выключился, вы пришли, подергали мышкой и вдруг все окна оказались на одном главном мониторе, всё в кучу, вы снова раскидываете окна и ситуация каждый раз повторяется.
Данная тема обсуждается на многих ресурсах, в том числе и на форуме Microsoft, но решение и четкое описание проблемы найти сложно.
Такой проблемы могут не наблюдать обладатели мониторов без двухсторонней связи или с выключенным по умолчанию DDC/CI (на предыдущем DELL такого не было, там в меню выключено было). Если у вас только один монитор, то окна тоже не перестраиваются.
При подключении монитора по DisplayPort, когда он уходит в спящий режим — система думает что его нет, все окошки перекидываются при пробуждении на другой монитор, а когда этот основной монитор определяется через доли секунды — все окошки на него улетают. Неприятное явление.
Пользователи форумов жалуются на это, некоторые при запуске рендеринга на всю ночь просто убавляют яркость, некоторые ставят заставки и отключают выключение монитора по таймауту.
Некоторые люди даже на форуме майкрософт просят сделать такую настройку, при которой после отключения монитора окна останутся на нем, либо перекинутся на другой дисплей.
Решений тут много, если монитор поддерживает отключение DDC, то можно так и сделать.
Можно контакт перерубить, но это тоже какое-то жестокое решение.
У меня не было возможности посмотреть как это на видеокартах Nvidia, но на AMD достаточно просто выключить в службах «AMD External Events Utility», для Nvidia отключается служба «NVIDIA Update Service Deamon».
После этих манипуляций можно даже кнопкой выключить монитор и окна не убегут с него никуда, очень удобно для тех, у кого очень много мониторов и нужно периодами выключать монитор.
И еще такой момент, у меня второй монитор китайским шнурком подключен DVI-HDMI, и он всегда раньше именно так себя и проявлял, на втором мониторе у меня запущен код и что-то по работе, а на основном 34 дюймовом я смотрю фильмы, когда усаживаюсь на диван то совсем не хочу чтобы второй монитор меня отвлекал, выключаю его и окна не перестраиваются, видимо, на этом шнурке не реализован тот самый DDC/CI.
Просьба не судить строго и было бы полезным, если бы вы добавили свои варианты решения подобных проблем.
Спасибо за внимание, надеюсь кому-то это будет полезным.
UPD: Когда окна не собираются на один монитор, а остались на выключенном — можно нажать WIN+P и вместо «расширить» выбрать «только экран компьютера» или «только второй монитор».
Можно еще через Alt+TAB выбрать окно, а дальше через WIN+стрелочка (вправо/влево) сдвинуть его на монитор, зависит от расположения мониторов в настройках.
Чтобы отобразить окно, необходимо создать экземпляр класса Window и вызвать метод Show() или ShowDialog().
Метод ShowDialog() отображает модальное окно. Модальные окна не позволяют пользователю получать доступ к родительскому окну, блокируя возможность использования в нем мыши и возможность ввода в нем каких-то данных до тех пор, пока модальное окно не будет закрыто. Вдобавок метод ShowDialog() не осуществляет возврат до тех пор, пока модальное окно не будет закрыто, так что выполнение любого находящегося после него кода на время откладывается. (Однако это не означает, что в данное время не может выполняться никакой другой код — например, при наличии запущенного таймера обработчик его событий все равно будет работать.) Наиболее часто применяемая в коде схема выглядит так: отображение модального окна, ожидание его закрытия и последующее выполнение над его данными какой-нибудь операции.
Ниже показан пример использования метода ShowDialog():
Метод Show() отображает немодальное окно, которое не блокирует доступ пользователя ни к каким другим окнам. Более того, метод Show() производит возврат управления сразу после отображения окна, благодаря чему следующие за ним в коде операторы выполняются незамедлительно. Можно создавать и показывать сразу несколько немодальных окон, и пользователь может взаимодействовать со всеми ними одновременно.
В случае применения немодальных окон иногда требуется код синхронизации, гарантирующий обновление информации во втором окне при внесении каких-то изменений в первом и тем самым исключающий вероятность работы пользователя с недействительными данными.
Ниже показан пример использования метода Show():
Модальные окна идеально подходят для предоставления пользователю приглашения сделать выбор, прежде чем выполнение операции сможет быть продолжено. Например, возьмем приложение Microsoft Word. Это приложение всегда отображает окна Options (Параметры) и Print (Печать) в модальном режиме, вынуждая пользователя принимать решение перед продолжением. С другой стороны, окна, предназначенные для поиска по тексту или проверки наличия в документе орфографических ошибок, Microsoft Word отображает в немодальном режиме, позволяя пользователю редактировать текст в основном окне документа, пока идет выполнение задачи.
Закрывается окно точно так же просто, с помощью метода Close(). Альтернативным вариантом является сокрытие окна из вида путем использования метода Hide() или установки для свойства Visibility значения Hidden. И в том и в другом случае окно остается открытым и доступным для кода. Как правило, скрывать имеет смысл только немодальные окна. Дело в том, что при сокрытии модального окна код остается в "замороженном" состоянии до тех пор, пока окно не будет закрыто, а закрыть невидимое окно пользователь никак не сможет.
Позиционирование окна
Обычно размещать окно в каком-нибудь точно определенном месте на экране не требуется. В таких случаях можно просто указать для свойства WindowStartupLocation значение CenterOwner и ни о чем не беспокоится. В других случаях, которые хоть встречаются реже, но все-таки бывают, должна задаваться точная позиция окна, что подразумевает использование значения Manual для свойства WindowStartupLocation и указание точных координат в свойствах Left и Top.
Иногда выбору подходящего месторасположения и размера для окна нужно уделять немного больше внимания. Для примера рассмотрим следующую ситуацию: вы случайно создали окно с размером, который является слишком большим для отображения на дисплее с низким разрешением. Если речь идет о приложении с единственным окном, тогда наилучшим решением будет создать окно с возможностью изменения размеров. Если же речь идет о приложении с несколькими плавающими окнами, то дело усложняется.
Можно попробовать просто ограничить позиции окна теми, которые поддерживаются даже на самых маленьких мониторах, но это, скорее всего, будет раздражать пользователей мониторов более новых моделей (которые приобрели мониторы с большей разрешающей способностью специально для того, чтобы иметь возможность умещать на экране больше информации). Поэтому вероятнее всего придется принимать решение о наилучшем размещении окна во время выполнения. А для этого потребуется извлечь кое-какую базовую информацию о доступном оборудовании для отображения с помощью класса System.Windows.SystemParameters.
Класс SystemParameters поддерживает огромный список статических свойств, которые возвращают информацию о различных параметрах системы. Например, его можно использовать для определения, включил ли пользователь помимо всего прочего функцию "горячего" отслеживания (hot tracking) и возможность перетаскивания целых окон. В случае окон класс SystemParameters особенно полезен, потому что предоставляет два свойства, которые возвращают информацию о размерах текущего экрана: FullPrimaryScreenHeight и FullPrimaryScreenWidth. Оба они довольно просты, что иллюстрируется в показанном ниже коде (центрирующем окно во время выполнения):
Хотя этот код эквивалентен применению свойства WindowStartupLocation со значением CenterScreen, он предоставляет гибкость, позволяя реализовать различную логику позиционирования и выполнять ее в подходящее время.
Еще лучший вариант предусматривает применение прямоугольника SystemParameters.WorkArea для размещения окна в свободной области экрана. При вычислении рабочей области область, где пристыкована панель задач (и любые другие "полосы", стыкованные с рабочим столом), не учитывается.
Оба примера с позиционированием окна характеризуются одним небольшим недостатком. Когда свойство Тор устанавливается для окна, которое уже является видимым, это окно незамедлительно перемещается и обновляется. То же самое происходит и при установке свойства Left в следующей строке кода. В результате пользователям с хорошим зрением может быть заметно, что окно перемещается дважды. К сожалению, класс Window не предоставляет метода, который бы позволял устанавливать оба этих свойства одновременно. Поэтому единственным решением является позиционирование окна после его создания, но перед его отображением с помощью метода Show() или ShowDialog().
Сохранение и восстановление информации о местоположении окна
К числу типичных требований для окна относится и запоминание его последнего месторасположения. Эта информация может сохраняться как в конфигурационном файле пользователя, так и в системном реестре Windows.
Если нужно сделать так, чтобы информация о расположении какого-то важного окна хранилась в конфигурационном файле конкретного пользователя, дважды щелкните на узле Properties (Свойства) в окне Solution Explorer и выберите раздел Settings (Параметры). После этого добавьте действующий только на уровне данного пользователя параметр с типом данных System.Windows.Rect, как показано на рисунке:
При наличии такого параметра далее можно легко создать код, который будет автоматически сохранять информацию о размерах и расположении окна:
Обратите внимание, что в приведенном коде используется свойство RestoreBounds, которое предоставляет корректные размеры (т.е. последний размер окна в обычном состоянии — не свернутом и не развернутом), даже если в текущий момент окно развернуто или свернуто. (Эта удобная функция не была напрямую доступной в Windows Forms и требовала вызова неуправляемой API-функции GetWindowPlacement().)
Извлечь эту информацию, когда она необходима, тоже легко:
Единственным ограничением при таком подходе является необходимость создавать отдельное свойство для каждого окна, у которого должна сохраняться информация о расположении и размерах. Если требуется, чтобы информация о расположении сохранялась у множества различных окон, тогда, возможно, лучше будет разработать более гибкую систему.
Читайте также: