12

我需要在第一次打开视图时设置它的默认大小,但视图必须允许用户展开它。(由于其他原因,我不能在 WindowManager 中使用 SizeToContent 属性。)

这一定是常见的事情,设置默认窗口大小的推荐方法是什么?

4

5 回答 5

13

这实际上困扰了我一段时间。一旦我想通了,我就很生气,因为我没有早点想通。

在 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);
    }
}

我希望在文档中有更多关于使用它的信息,但是你有它。

于 2014-07-15T14:49:46.760 回答
6

不确定这在发表这篇文章时是否适用,但对于现在关注的任何人来说,这是您可以在应用引导程序中轻松设置 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);
    }
于 2016-08-23T00:18:51.217 回答
3

不确定这是否是推荐的方法,但UserControl您可以引导/显示 aWindow而不是引导/显示 a,然后设置高度、宽度等。

于 2013-05-06T23:36:02.613 回答
1

这是基于休的回答的答案:

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

        DisplayRootViewFor<IShellViewModel>(window_settings);
于 2017-02-21T07:35:43.533 回答
0

您还可以在引导程序中获取 IWindowManager 的实例并在那里设置 RootView 的初始大小。这是基于 GrantByrne 的回答。

public class CustomBootstrapper : BootstrapperBase
{
    public CustomBootstrapper()
    {
        Initialize();
    }

    protected override void OnStartup(object sender, StartupEventArgs e)
    {
        var windowManager = IoC.Get<IWindowManager>();

        MainViewModel mainViewModel = IoC.Get<MainViewModel>();

        dynamic settings = new ExpandoObject();
        settings.Height = 500;
        settings.Width = 800;
        settings.SizeToContent = SizeToContent.Manual;

        windowManager.ShowWindow(mainViewModel, null, settings);
    }
}
于 2020-08-14T09:55:44.383 回答