Caliburn.Micro:使用WPF使用IWindowManager创建无边框窗口

时间:2012-01-13 17:49:45

标签: wpf caliburn.micro

使用IWindowManagerCaliburn.Micro,是否可以使用ShowWindow方法创建无边框窗口?

在这种情况下,Window的内容是从UserControl生成的。 Caliburn.Micro将创建一个Window来托管UserControl。

1 个答案:

答案 0 :(得分:8)

编辑:今天的状态:

使用当前的Caliburn.Micro v1.2(2011年7月20日)版本,无法在创建的窗口上设置属性。您可以继承WindowManager并覆盖CreateWindow方法:

public class BorderlessWindowManager : WindowManager
{
    protected override Window CreateWindow(object rootModel, bool isDialog, 
       object context)
    {
        var window = base.CreateWindow(rootModel, isDialog, context);
        window.WindowStyle = WindowStyle.None;
        window.ShowInTaskbar = false;
        window.AllowsTransparency = true;
        window.Background = new SolidColorBrush(Colors.Transparent);
        return window;
    }
}

发布新版本时

是的,可以使用settings参数:

public interface IWindowManager
{
    //...
    void ShowWindow(object rootModel, object context = null, 
         IDictionary<string, object> settings = null);
}

Caliburn.Micro将此字典用作[property name; property value]包,并使用反射在创建的窗口上设置它们。 我从来没有创建过无边框窗口,但基于此artice这样的东西应该可以工作:

windowManger.ShowWindow(viewModel, 
    settings: new Dictionary<string, object>
    {
        { "WindowStyle", WindowStyle.None},
        { "ShowInTaskbar", false},
        { "AllowsTransparency", true},
        { "Background", new SolidColorBrush(Colors.Transparent)},
    });