该项目是使用 WPF MVVMLight 框架组成的。
对象是:创建一组工具栏,每个工具栏还具有动态创建的工具栏项目(为了清晰起见的按钮),仅使用 XAML 中必要的“骨架”代码。
通过使用HierarchicalDataTemplate为其传播 MenuItems,动态创建菜单的努力是成功的。
对于 Menu,它只是创建每个 Menu 对象,其中包含一个 MenuItems 数组。
工具栏的问题;但是,是否需要一个ToolBars数组,其中包含另一个Items 数组......
public enum SiClopsExplorerToolbarType
{
#region file
[Description( "New Folder" )]
[TypeId( 1 )]
Folder ,
[Description( "New File" )]
[TypeId( 1 )]
File ,
.
.
#endregion // file
#region edit
[Description( "Cut" )]
[TypeId( 2 )]
Cut ,
[Description( "Copy" )]
[TypeId( 2 )]
Copy ,
[Description( "Paste" )]
[TypeId( 2 )]
Paste ,
#endregion // edit
#region view
[Description( "SI-CLOPS Explorer" )]
[TypeId( 3 )]
SiClopsExplorer ,
[Description( "Publication Data" )]
[TypeId( 3 )]
PublicationData ,
#endregion // view
}
...每个枚举的 TypeId 指示要创建哪个工具栏,从而为以下三个工具栏及其按钮创建按钮:TB 1(文件)、TB 2(编辑)、TB 3(视图)。
public class ToolbarEntity
{
#region constructor
#endregion // constructor
public ToolbarEntity()
{
Toolbars = new List<ToolbarEntity>();
}
#region properties
public IList<ToolbarEntity> Toolbars { get; set; }
/// <summary>
/// The Description value of the MDI child-menu-type enumerated object is used as the display value for each menu item.
/// </summary>
public string Text { get; set; }
/// <summary>
/// An integer denoting the menu-level. Top level menus are zero. 1st sub-level menus are one, etc.
/// </summary>
public int MenuLevel { get; set; }
/// <summary>
/// Top Level menus are given a unique id so can delineate the start of the next top-level menu.
/// </summary>
public int MenuId { get; set; }
#endregion // properties
}
上面是一个简单的类,将用作 MVVM“模型”,在其中对视图执行 DataBinding。
对于视图本身,需要类似以下内容:
<ToolBarTray DockPanel.Dock="Top">
<!-- Dynamically created or hardcoded in XAML... -->
<ToolBar >
<!-- Dynamically created ToolBar items... -->
<Button />
</ToolBar>
<!-- Dynamically created or hardcoded in XAML... -->
<ToolBar >
<!-- Dynamically created ToolBar items... -->
<Button />
</ToolBar>
</ToolBarTray>
ViewModel 将如何创建工具栏及其关联的工具栏项?
提前致谢