Хорошо, мне кажется, вы рассматриваете WPF так, как если бы вы работали в старом школьном приложении WinForms. Вам больше не нужно отслеживать события формы, чтобы получать информацию из свойств форм. Большинство управляющих свойств WPF - это то, что называется Свойство зависимости .
Вот некоторые из умных свойств, которые представляют свойства зависимости: Привязка данных .
Если вы затем подумаете о написании приложения с архитектурой MVVM , вы быстро сможете сами решить следующие вопросы ... =)
В представлении * 1 вы можете создать либо свойства зависимости, либо стандартные свойства и реализовать INotifyPropertyChanged , которые содержат размер / макет / положение / и т. Д. Затем свяжите свойства формы (в xaml или коде) со свойствами представления. Затем вы можете реализовать любые функции, которые вам нравятся, для хранения / извлечения значений по умолчанию и автоматического обновления при изменении формы, просто адаптировав Get / Set свойств в представлении.
В качестве быстрого примера для Windows 'Заголовок:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="{Binding Path=DisplayName}"
WindowStartupLocation="CenterScreen" >
<Grid>...</Grid>
</Window>
Пример реализации представления:
public class SampleView : System.ComponentModel.INotifyPropertyChanged
{
public event PropertyChangedEventHandler System.ComponentModel.INotifyPropertyChanged.PropertyChanged;
public delegate void PropertyChangedEventHandler(object sender, System.ComponentModel.PropertyChangedEventArgs e);
private string _Title;
public string Title {
get {
if (_Title == null) {
_Title = My.Settings.MainWindowTitle;
}
return _Title;
}
set {
_Title = value;
if (!(_Title == My.Settings.MainWindowTitle)) {
if (PropertyChanged != null) {
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("Title"));
}
My.Settings.MainWindowTitle = Title;
My.Settings.Save();
}
}
}
}
РЕДАКТИРОВАТЬ: Относительно того, как лучше хранить пользовательские настройки, я не рекомендовал бы реестр, хотя, это далеко не неслыханно. В настоящее время реестр заполнен настройками, для которых , на мой взгляд , реестр не был предназначен. Подумайте об использовании настроек приложения с настройкой пользовательской области. Это позволит справиться с большинством вопросов о том, где и как данные хранятся / извлекаются, и предоставит вам приятный типобезопасный интерфейс для вас.
* 1 Лично я предпочитаю попытаться связать все с ViewModel и у меня почти полностью тупые виды; хотя я знаю, что существует множество допустимых случаев для представлений, имеющих код. Я бы не сказал, что Size / Layout / etc - это действительно бизнес-логика, и до сих пор я этим не занимался, поэтому, вероятно, это следует обрабатывать в самом View.
РЕДАКТИРОВАТЬ 2 - Быстрый пример настроек области действия пользователя / приложения:
Вот краткая картина настроек, которые я добавил в проект:
![Settings screenshot](https://i.stack.imgur.com/neKMg.jpg)
Следующий код пытается использовать настройки приложения и области действия пользователя.
Примечание: Настройки области приложения доступны только для чтения во время выполнения
public class SettingsExample
{
private Form1 frmMain = new Form1();
public void Main()
{
frmMain.BackColor = My.Settings.DefaultBackColour;
}
public void UserLoggedIn()
{
frmMain.BackColor = My.Settings.UserBackcolour;
}
public void UpdateUserBackcolour(System.Drawing.Color newColour)
{
My.Settings.UserBackcolour = newColour;
My.Settings.Save();
}
public void UpdateDefaultBackcolour(System.Drawing.Color newColour)
{
My.Settings.DefaultBackColour = newColour;
// Compiler Error
// This property is read only because it is an application setting
// Only user settings can be changed at runtime
}
}