【问题标题】:How to use a custom Window with Caliburn.Micro 2?如何在 Caliburn.Micro 2 中使用自定义窗口?
【发布时间】:2015-01-18 03:18:43
【问题描述】:

我想使用我自己的扩展 Window 的类来在使用 Caliburn.Micro 的 MVVM 环境中显示对话框。

我已经阅读了如何通过覆盖 WindowManager 中的 EnsureWindow 方法或访问默认的 WindowManager 来自定义 CM 提供的窗口em> 我的视图模型中的实例并将设置字典传递给“ShowDialog”方法。尽管如此,我真正需要的是使用我自己的类,因为它包含其他元素,这些元素不能通过简单地设置一些属性来提供给默认窗口。

为了清楚起见,我可以将默认的 Window 类用于我的根视图。

这可能吗?如果不知何故我的问题没有意义,我会很高兴扩展我的理由......

提前感谢社区!

【问题讨论】:

  • 您不必使用内置的 WindowManager。我实际上将 Telerik RadWindow 用于我的一个应用程序并使用 IWindowManager 并在我需要不同功能的地方进行扩展。
  • @mvermef:感谢您的回复!澄清一下,您是说继承 WindowManager 并覆盖例如“ShowWindow”方法,提供您自己的自定义窗口?能举个简单的例子吗?
  • @mvermef:在仔细考虑了您的回复几分钟后,我继续并覆盖了 WindowManager 类的 EnsureWindow,将在那里创建的 Window 实例替换为我自己的扩展 Window 的类。这似乎起到了作用。这或多或少是您对 Telerik RadWindow 所做的吗?
  • 是的,很高兴它对你有用!

标签: c# wpf mvvm caliburn.micro


【解决方案1】:

根据@mvermef 的建议,我做了一些研究并想出了一个解决方案。它包括重写 WindowManager 类的 EnsureWindow 方法。这是一个例子:

protected override Window EnsureWindow(object model, object view, bool isDialog)
{
    var window = view as Window;
    if (window == null)
    {
        window = new MyCustomWindowClass
        {                 
            SizeToContent = SizeToContent.WidthAndHeight
        };

        // I defined a ContentControl "WindowContent" in MyCustomWindow  
        // class to insert the window's contents
        ((MyCustomWindowClass)window).WindowContent.Content = view;
        window.SetValue(View.IsGeneratedProperty, true);

        var owner = InferOwnerOf(window);
        if (owner != null)
        {
            window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            window.Owner = owner;
        }
        else
        {
            window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
        }
    }
    else
    {
        var owner = InferOwnerOf(window);
        if (owner != null && isDialog)
        {
            window.Owner = owner;
        }
    }

    return window;
}

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多