我想使用我自己的扩展 Window 的类来使用Caliburn.Micro在MVVM环境中显示对话框。
我已经阅读了如何通过覆盖 WindowManager 中的 EnsureWindow 方法或通过访问默认的 WindowManager来自定义CM提供的窗口我的视图模型中的实例,并将设置字典传递给“ShowDialog”方法。然而,我真正需要的是使用我自己的类,因为它包含其他元素,只是通过设置一些属性就无法提供给默认窗口。
为清楚起见,我可以使用默认的 Window 类作为我的根视图。
这有可能吗?如果某种方式我的问题没有意义,我会很高兴扩展我的理由......
先感谢社区!
答案 0 :(得分:0)
根据@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;
}