使用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)},
});