【问题标题】:Windows ribbon framework: Galleries in the ApplicationMenuWindows 功能区框架:ApplicationMenu 中的库
【发布时间】:2023-11-03 19:53:01
【问题描述】:

根据 MS 文档,功能区框架的应用程序菜单应该能够承载 DropDownGallery 元素,但我无法通过 uicc 编译器。例如:

<Ribbon.ApplicationMenu>
  <ApplicationMenu CommandName="AppMenu" >
    <ApplicationMenu.RecentItems>
      <RecentItems CommandName="RecentItems" EnablePinning="false" MaxCount="15" />
    </ApplicationMenu.RecentItems>
    <MenuGroup Class="MajorItems">
      <DropDownGallery CommandName="MyAppGallery" Type="Commands" HasLargeItems="false">
        <DropDownGallery.MenuLayout>
          <VerticalMenuLayout Gripper="None"/>
        </DropDownGallery.MenuLayout>
      </DropDownGallery>
    </MenuGroup>
  </ApplicationMenu>
</Ribbon.ApplicationMenu>

这会导致 uicc 编译器出现 SC1053 错误:

error SC1053 : The attribute 'Type' on the element '{http://schemas.microsoft.com/windows/2009/Ribbon}DropDownGallery' is not defined in the DTD/Schema.

相同的DropDownGallery 语法在我们应用程序的其他任何地方都有效,MS 文档明确指出DropDownGalleryMenuGroup 中允许的元素。

什么给了?

【问题讨论】:

    标签: menu gallery windows-ribbon-framework


    【解决方案1】:

    回答我自己的问题:

    原来这里有两个问题。

    1. 应用程序菜单中的画廊是有限的。唯一支持的布局是一级垂直命令菜单,唯一支持的属性是CommandNameApplicationMode。 MS 文档中的任何地方都没有提到这些限制。

    2. 功能区编译器 uicc.exe 中有一个明显的错误:它不允许元素标记中的任何空格任何地方,属性之间除外。

    将这些放在一起,这是唯一真正适用于应用菜单中画廊的标记:

    <DropDownGallery CommandName="MyAppGallery"/>
    

    <DropDownGallery CommandName="MyAppGallery"></DropDownGallery>
    

    请特别注意,only 空格位于元素名称和属性之间。即使&gt;&lt;/ 之间的空格也会导致功能区编译器出错:

    <!-- this will fail! -->
    <DropDownGallery CommandName="MyAppGallery"> </DropDownGallery>
    

    【讨论】: