迁移:窗口体系演进¶
Spec 054 有意移除了一些遗留的窗口字段,改用更显式的表达形式。除下列破坏性变更外,新 API 都是增量式的。
| 已移除 / 已变更的 API | 替代者 | 迁移方式 |
|---|---|---|
IsResizable(bool) |
ResizeMode(WindowResizeMode) |
IsResizable = false → ResizeMode = WindowResizeMode.NoResize。旧的默认值 true 对应新的默认值 CanResize。 |
IsShownInSwitchers(bool) |
ShowInTaskbar + ShowInSwitcher |
IsShownInSwitchers = false → ShowInTaskbar = false, ShowInSwitcher = false。 |
IsAlwaysOnTop(bool) |
Level(WindowLevel) |
IsAlwaysOnTop = true → Level = WindowLevel.AlwaysOnTop。 |
WindowStartPosition.RestoreFromPersistence |
.WithPersistence(id) 或 PersistPlacement = true |
旧写法:StartPosition = WindowStartPosition.RestoreFromPersistence, PersistenceId = "main"。新写法:new WindowSpec { Title = "Main" }.WithPersistence("main")。 |
ExtendsContentIntoTitleBar(bool) |
ExtendsContentIntoTitleBar(bool?)加上 TitleBar(...) 推断 |
如果存在 TitleBar(...) 元素,就去掉 ExtendsContentIntoTitleBar = true,让 Reactor 自行推断。只有在没有 TitleBar(...) 却要做内容延伸时才显式写 true;要强制使用系统标题栏则显式写 false。 |
示例¶
// Before
// new WindowSpec
// {
// Title = "Tools",
// IsResizable = false,
// IsShownInSwitchers = false,
// IsAlwaysOnTop = true,
// };
// After
public static WindowSpec Tools { get; } = new()
{
Title = "Tools",
ResizeMode = WindowResizeMode.NoResize,
ShowInTaskbar = false,
ShowInSwitcher = false,
Level = WindowLevel.AlwaysOnTop,
};
// Before
// new WindowSpec
// {
// Title = "Main",
// PersistenceId = "main",
// StartPosition = WindowStartPosition.RestoreFromPersistence,
// };
// After
public static WindowSpec Main { get; } =
new WindowSpec { Title = "Main" }.WithPersistence("main");
WindowPlacementCodec 只存储显示器指纹与 WINDOWPLACEMENT,
不存储 WindowStartPosition,因此无需对磁盘上的摆放数据做迁移。