.NET WPF Помнит размер окна между сессиями

Всегда указывайте необязательные аргументы в качестве последних аргументов со значением по умолчанию. Поскольку в PHP нет ни именованных параметров, ни «перегрузки Java», это единственный способ:

function replace_product_link( $link_html, $product, $args=null ){
    return $link_html;
}
87
задан Daniil Harik 11 May 2009 в 11:49
поделиться

4 ответа

Сохраните значения в файле user.config.

Вам необходимо создать значение в файле настроек - оно должно находиться в папке «Свойства». Создайте пять значений:

  • Верх типа double
  • Левый типа double
  • Высота типа double
  • Ширина типа double
  • Maximized типа bool - удерживать, развернуто ли окно или нет. Если вы хотите сохранить больше информации, то потребуется другой тип или структура.

Инициализируйте первые два значения 0, а вторые два - размером по умолчанию вашего приложения, а последний - значением false.

Создайте файл Window_OnSourceInitialized обработчик событий и добавьте следующее:

this.Top = Properties.Settings.Default.Top;
this.Left = Properties.Settings.Default.Left;
this.Height = Properties.Settings.Default.Height;
this.Width = Properties.Settings.Default.Width;
// Very quick and dirty - but it does the job
if (Properties.Settings.Default.Maximized)
{
    WindowState = WindowState.Maximized;
}

ПРИМЕЧАНИЕ:

114
ответ дан 24 November 2019 в 07:38
поделиться

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

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication1"
        Title="Window1"
        Height="{my:SettingBinding Height}"
        Width="{my:SettingBinding Width}"
        Left="{my:SettingBinding Left}"
        Top="{my:SettingBinding Top}">

Вы можете найти код этого расширения разметки здесь: http://www.thomaslevesque.com/2008/11/18/wpf-binding-to-application-settings-using-a-markup-extension/

71
ответ дан 24 November 2019 в 07:38
поделиться

Хотя вы можете «свернуть свое» и вручную где-нибудь сохранить настройки, и в целом это будет работать, очень легко не справиться со всеми случаями правильно. Гораздо лучше позволить ОС делать всю работу за вас, вызывая GetWindowPlacement () при выходе и SetWindowPlacement () при запуске. Он обрабатывает все безумные граничные случаи, которые могут возникнуть (несколько мониторов, сохранение нормального размера окна, если оно закрыто, пока оно развернуто, и т. Д.), Так что вам не придется.

Этот образец MSDN показывает, как использовать их с приложением WPF. Образец не идеален (окно будет начинаться в верхнем левом углу как можно меньше при первом запуске, и есть некоторая странность, когда конструктор настроек сохраняет значение типа WINDOWPLACEMENT ),

33
ответ дан 24 November 2019 в 07:38
поделиться

Просто написал запись в блоге, в которой подробно описывается, как это сделать простым и надежным способом. Он использует функции GetWindowPlacement и SetWindowPlacement , упомянутые Энди, но с некоторыми из упомянутых им странных действий убраны:

https://engy.us/blog/2010/ 03/08 / save-window-size-and-location-in-wpf-and-winforms /

Вот некоторые отличия от других ответов:

  • Этот код знает об изменениях монитора, поэтому он знает, как переместить окно, когда монитор отключен (чтобы он не отключился от экрана).
  • Он также может сохранять нормальный размер окна, даже когда оно развернуто, так что он знает, что восстанавливать, когда оно не развернуто.
  • Он также объединяет состояние окна в одну строку, которую легче сохранить.
  • Код определяет класс, который можно использовать в одном или нескольких окнах вашего проекта, просто подключив два события. Таким образом, он не загромождает файлы вашего проекта.
41
ответ дан 24 November 2019 в 07:38
поделиться