这是一个相当复杂的主题;大约两年前,我为内部使用构建了一个相当全面的向导控件,我记得花了几周时间才能完全正确地工作。
基本元素包括:
- 头部面板
- 内容面板
- 操作面板
- 侧边栏
内容面板和操作面板都使用 ParentControlDesigner 来启用控件拖放。内容面板不允许您直接在其上拖放,而是允许您在活动页面(子面板)上拖放。操作面板还有一个“默认”模式,它创建标准的 4 个按钮(上一步、下一步、取消、完成)。我主要实现了自定义模式,这样我就可以对其进行皮肤化,即使用 DevEx 按钮而不是标准 Winforms 按钮。
标题基本上是静态的,它是一个 PictureBox 和 Label,其中图像、文本和字体可定制。(默认情况下,文本与页面标题相同,并且字体是控件的字体,加粗风格添加)。
然后,API 公开了一组数据结构:
- 步骤(具有名称、标题等,还指定它们是否应链接到侧边栏)
- 工作流程(即根据您的选择下一步要去哪里)
- 验证事件(同步和异步)
- 操作(在页面更改、按钮单击等之前/之后运行)
- 过渡效果(我为乐趣而做的,用户喜欢它们)
我为步骤编写了一个自定义集合编辑器,这将为内容面板创建子面板,如上所述。每个面板都只是直接添加到控件集合中,但根据活动步骤属性,一次只能看到一个面板。我记得停靠似乎从来没有完全正确地工作过,所以我不得不覆盖所有调整大小方法。我从未想过创建智能标记以轻松翻转页面,但可以在属性网格上选择活动页面(或页面索引)。
然后,我还必须包括大量钩子,以插入任何自定义逻辑在各个页面上。很难在此处详细介绍,而不发布所有代码。
正确设计和测试需要相当多的时间,但我不记得使用任何花哨的设计技巧,只需从单个 UI 元素(运行时和设计时)和数据结构以及它们之间的交互的角度系统地解决问题即可。
记住,所有这些都是为了创建可重用的向导组件而进行的,因为我们需要为特定应用程序开发约10个这样的组件(它也对其他项目很有用)。如果我只需要快速地拼凑一个向导,我可能不会费那么多劲,而是像你现在做的那样使用选项卡控件和几个流式面板。或者更好的是,我会使用现在许多Winforms库中提供的现成向导控件,例如DX库。