Установка начального размера окна в Caliburn.micro
Мне нужно установить размер представления по умолчанию при его первом открытии, но представление должно позволить пользователю его расширять. (По другим причинам я не могу использовать свойство SizeToContent в моем WindowManager.)
Это должно быть обычным делом, какой рекомендуемый подход к настройке размера окна по умолчанию?
Ответы
Ответ 1
Это то, что на самом деле исказило меня какое-то время. Как только я понял это, меня раздражало, что я не понял этого раньше.
При отображении окна в caliburn вы можете установить атрибуты объекта Window при его вызове.
Итак, скажем, вы хотите установить высоту и ширину в окне на 600 x 300:
Сначала вы начнете с чего-то вроде этого:
public class ShellViewModel : PropertyChangedBase, IShell
{
private readonly IWindowManager windowManager;
public ShellViewModel()
{
this.windowManager = new WindowManager();
this.windowManager.ShowWindow(new LameViewModel());
}
}
В методе ShowWindow есть еще два поля. Третий параметр позволяет динамически устанавливать атрибуты в объекте Window.
public class ShellViewModel : PropertyChangedBase, IShell
{
private readonly IWindowManager windowManager;
public ShellViewModel()
{
this.windowManager = new WindowManager();
dynamic settings = new ExpandoObject();
settings.Height = 600;
settings.Width = 300;
settings.SizeToContent = SizeToContent.Manual;
this.windowManager.ShowWindow(new LameViewModel(), null, settings);
}
}
Я хотел бы получить дополнительную информацию о работе с этим в документации, но там у вас есть.
Ответ 2
Не уверен, что это применимо в то время, когда этот пост был сделан, но для всех, кто сейчас идет, это то, как вы можете легко установить размер окна в CaliburnMicro в загрузочном блоке приложения. Мой код предназначен для сохранения тех же размеров окна при запуске, что и при предыдущем закрытии. Я сохраняю высоту/ширину экрана как параметры настройки при закрытии, а затем возвращаю их при запуске здесь (с проверкой, чтобы обеспечить не больше текущего размера экрана).
AppBootstrapper.cs
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e) {
double width = Settings.Default.screen_width; //Previous window width
double height = Settings.Default.screen_height; //Previous window height
double screen_width = System.Windows.SystemParameters.PrimaryScreenWidth;
double screen_height = System.Windows.SystemParameters.PrimaryScreenHeight;
if (width > screen_width) width = (screen_width - 10);
if (height > screen_height) height = (screen_height-10);
Dictionary<string, object> window_settings = new Dictionary<string, object>();
window_settings.Add("Width", width);
window_settings.Add("Height", height);
DisplayRootViewFor<IShell>(window_settings);
}
Ответ 3
Не уверен, что это рекомендуемый подход, но вместо того, чтобы загружать/показывать UserControl
, вы можете загрузиться/показать Window
, а затем установить Height, Width и т.д.
Ответ 4
Вот ответ, основанный на ответе Хью:
Dictionary<string, object> window_settings = new Dictionary<string, object>();
window_settings.Add("WindowState", System.Windows.WindowState.Maximized);
DisplayRootViewFor<IShellViewModel>(window_settings);