Caliburn.Micro:使用WPF用IWindowManager创建一个无边界窗口



使用Caliburn.Micro的IWindowManager,是否可以使用ShowWindow方法创建无边界窗口?

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

编辑:当前状态:

在当前的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]包,并将其设置在创建的带有反射的窗口上。我从来没有创建过一个无边界窗口,但基于这篇文章,这样的东西应该可以工作:

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

相关内容

  • 没有找到相关文章

最新更新