使用IWindowManager的Caliburn.Micro,是否可以使用ShowWindow
方法创建无边框窗口?
在这种情况下,Window的内容是从UserControl生成的。 Caliburn.Micro将创建一个Window来托管UserControl。
答案 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)},
});