Установка начального размера окна в 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);