Caliburn.Micro中的窗口管理:WindowManager
WindowManager
是 Caliburn.Micro 框架中的一个核心服务,负责管理 WPF 应用程序中的窗口、对话框和消息框。它通过统一的接口简化了窗口的创建、显示和管理。WindowManager
的主要作用是帮助开发者轻松地打开和关闭窗口或对话框,并支持显示模式对话框(Modal)和非模式对话框(Non-Modal)的管理。
WindowManager提供的主要方法
ShowWindow(object rootModel, object context = null, IDictionary<string, object> settings = null)
:
- 显示一个新窗口(非模式)。
rootModel
: 要显示的ViewModel
。context
: 上下文参数,用于绑定到特定的视图。settings
: 允许配置窗口的一些属性(例如宽度、高度等)。
ShowDialog(object rootModel, object context = null, IDictionary<string, object> settings = null)
:
- 显示一个模式对话框。
- 与
ShowWindow
类似,但是窗口是模式的,表示用户必须关闭该窗口才能继续使用应用程序的其他部分。
ShowPopup(object rootModel, object context = null, IDictionary<string, object> settings = null)
:
- 显示一个弹出窗口(Popup)。
- 适用于非模态弹出窗口,比如在应用程序中显示提示或帮助信息。
使用示例
1. 显示非模式窗口
假设我们有一个 MainViewModel
,在其中点击按钮后会打开一个新窗口显示 ChildViewModel
。
MainViewModel
:
using Caliburn.Micro;
public class MainViewModel : Screen
{
private readonly IWindowManager _windowManager;
// 通过依赖注入获取 WindowManager
public MainViewModel(IWindowManager windowManager)
{
_windowManager = windowManager;
}
// 打开非模式窗口
public void OpenWindow()
{
var childViewModel = new ChildViewModel();
_windowManager.ShowWindow(childViewModel);
}
}
ChildViewModel
:
using Caliburn.Micro;
public class ChildViewModel : Screen
{
public string Message => "This is a child window!";
}
MainView.xaml
:
<Window x:Class="YourNamespace.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Main Window" Height="200" Width="300">
<Grid>
<Button Content="Open Window"
HorizontalAlignment="Center" VerticalAlignment="Center"
cal:Message.Attach="[Event Click] = [Action OpenWindow]" />
</Grid>
</Window>
ChildView.xaml
:
<Window x:Class="YourNamespace.ChildView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Child Window" Height="200" Width="300">
<Grid>
<TextBlock Text="{Binding Message}"
HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</Window>
2. 显示模式对话框
模式对话框会阻止用户访问其他窗口,直到该窗口被关闭。通过 ShowDialog
可以实现模式对话框的显示。
修改 MainViewModel
:
public void OpenDialog()
{
var childViewModel = new ChildViewModel();
_windowManager.ShowDialog(childViewModel);
}
修改 MainView.xaml
:
<Button Content="Open Dialog"
HorizontalAlignment="Center" VerticalAlignment="Center"
cal:Message.Attach="[Event Click] = [Action OpenDialog]" />
3. 显示弹出窗口(Popup)
弹出窗口可以用来显示提示信息或工具提示。使用 ShowPopup
方法可以显示非模态的弹出窗口。
示例代码:
public void OpenPopup()
{
var popupViewModel = new PopupViewModel();
_windowManager.ShowPopup(popupViewModel);
}
自定义窗口设置
WindowManager
提供了一个 settings
参数,可以用来配置窗口的属性,例如宽度、高度等。
自定义设置示例:
public void OpenCustomWindow()
{
var childViewModel = new ChildViewModel();
var settings = new Dictionary<string, object>
{
{ "Height", 400 },
{ "Width", 600 },
{ "Title", "Custom Window" }
};
_windowManager.ShowWindow(childViewModel, null, settings);
}
在这里,我们通过 settings
参数指定了窗口的高度、宽度和标题。
总结
WindowManager
是 Caliburn.Micro 中用于管理窗口的核心服务,提供了简洁的接口用于显示窗口、对话框和弹出窗口。- 它的核心方法包括
ShowWindow()
、ShowDialog()
和ShowPopup()
,可以处理非模式窗口、模式对话框和弹出窗口的显示。 WindowManager
使用方便,并且与 Caliburn.Micro 的ViewModel
自动绑定机制很好地协同工作,使得窗口的管理更加容易。