2013-05-06 3 views
10

Мне нужно установить размер по умолчанию для вида при его первом открытии, но представление должно позволить пользователю его расширять. (По другим причинам я не могу использовать свойство SizeToContent в моем WindowManager.)Установка начального размера окна в Caliburn.micro

Это должно быть обычным делом, какой рекомендуемый подход к настройке размера окна по умолчанию?

+0

Единственный способ, которым я могу видеть эту работу, если установить конкретный размер, по вашему мнению, затем отпустите представление, установив размер в auto после загрузки представления, гарантируя, что окно является правильным размером для содержимого. Это может быть поведение, которое вы задали в своем представлении. – Charleh

ответ

7

Это то, что на самом деле меня прослушивает для в то время как. Как только я понял это, меня раздражало, что я не понял этого раньше.

При отображении окна в caliburn вы можете установить атрибуты объекта Window при его вызове.

Итак, предположим, что вы хотите установить высоту и ширину в окне до 600 х 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

Возможно, вам потребуется добавить еще одну настройку: 'SizeToContent = SizeToContent.Manual'. – Govert

+0

Хорошо, он обновлен. – GrantByrne

2

Не уверен, если это рекомендуемый подход, но вместо самозагрузки /, показывая UserControl вы можете самонастройки/показать Window вместо, а затем установить высоту, ширину и т.д.

3

Не уверен, что это применимо в то время, когда это сообщение было сделано, но для тех, кто сейчас следует, это то, как вы можете легко установить размер окна в 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); 
    } 
2

Вот ответ, основанный на ответ Хью:

 Dictionary<string, object> window_settings = new Dictionary<string, object>(); 
     window_settings.Add("WindowState", System.Windows.WindowState.Maximized); 

     DisplayRootViewFor<IShellViewModel>(window_settings); 
Смежные вопросы