技术开发 频道

VS与Win7共舞:用XML文件定义Ribbon界面

  在上面的代码中,我们定义了控件的各种属性,现在要将这些控件布置到Ribbon面板上,则需要Tab页面的缩放策略来控制了。所以,我们在XML文件的视图部分对控件进行布置并设置缩放策略:

<Application.Views>
    
<Ribbon>
      
<Ribbon.Tabs>
        
<Tab CommandName="TabHome">
          
<!--定义Tab页面的缩放策略-->
          
<Tab.ScalingPolicy>
            
<ScalingPolicy>
              
<!--定义在默认情况下的控件尺寸。
              在通常情况下,应用程序启动后都处于尺寸最大的状态,
              所以在这里,都默认使用大尺寸
-->
              
<ScalingPolicy.IdealSizes>
                
<Scale Group="GroupMain" Size="Large"/>
                
<Scale Group ="GroupDatabase" Size="Large"/>
                
<Scale Group ="GroupClipboard" Size="Large"/>
              
</ScalingPolicy.IdealSizes>
              
<!--这里定义了Ribbon面板缩放时,Ribbon控件缩放的次序
              比如,当窗口缩小,Ribbon面板跟着缩小时,GroupDatabase组
              的按钮将首先缩小为Medium类型,其次GroupClipboard组缩小
              为Medium类型,以此类推
-->
              
<Scale Group ="GroupDatabase" Size="Medium"/>
              
<Scale Group ="GroupClipboard" Size="Medium"/>
              
<Scale Group ="GroupClipboard" Size="Popup"/>
              
<Scale Group ="GroupMain" Size="Medium"/>
            
</ScalingPolicy>
          
</Tab.ScalingPolicy>

          
<!--定义控件的嵌套关系
          我们使用组的SizeDefinition属性定义组内控件的排布方式
-->
          
<Group CommandName="GroupMain" SizeDefinition="TwoButtons">
            
<Button CommandName="MyButton"/>
            
<Button CommandName="AddTable"/>
          
</Group>
          
<Group CommandName="GroupDatabase" SizeDefinition="ThreeButtons">
            
<Button CommandName="AddTable"/>
            
<Button CommandName="DeleteTable"/>
            
<Button CommandName="PrintRelationships"/>
          
</Group>
          
<Group CommandName="GroupClipboard" SizeDefinition ="BigButtonsAndSmallButtonsOrInputs">
            
<ControlGroup>
              
<Button CommandName="Paste"/>
            
</ControlGroup>
            
<ControlGroup>
              
<Button CommandName="Cut"/>
              
<Button CommandName="Copy"/>
            
</ControlGroup>
          
</Group>
        
</Tab>
      
</Ribbon.Tabs>
    
</Ribbon>
  
</Application.Views>

  在这段代码中,通过Tab页面TabHome的缩放策略,我们首先定义了各个控件组在默认情况下的显示排布状态。在窗口足够大,Ribbon界面能够完全显示的情况下,Ribbon界面中的控件将按照这样的设置进行显示,所以如果我们想要某个组的控件图标显示为大图标或是小图标,就可以在这里进行设置。完成默认情况下的定义后,就开始定义控件的缩放策略了。在这里,按照次序,我们逐个定义在Ribbon面板尺寸变化时尺寸发生变化的组。当Ribbon面板的尺寸变化时,Ribbon界面中的控件将按照这样的次序发生重排,减少控件使用的面积,以使得Ribbon面板能够显示所有控件。

  Tab页面的缩放策略定义完成后,我们就可以开始定义控件的包含关系。这里,我们使用了组控件的SizeDefinition属性来定义组内控件的排布方式。例如,如果我们使用“TwoButtons”,表示组内有两个按钮,可以并排排布。如果我们使用“BigButtonsAndSmallButtonsOrInputs”,则表示组内有一个大的按钮,而其他的控件则是小按钮或者其他输入控件。下面这幅图演示了缩放策略所控制的Ribbon界面控件的缩放次序。当我们缩小窗口,Ribbon面板的尺寸减小,根据缩放策略中所定义的,首先缩小的是GroupDatabase组中的控件,以减小Ribbon面板中控件占用的尺寸。当窗口继续缩小,接着缩小的是GroupClipboard组中的控件,依次变为Medium模式和Popup模式。最后,当尺寸继续缩小,最重要的GroupMain组才开始改变尺寸。通过有次序的控制,我们可以先缩小不太常用的命令控件,而把最重要最常用的命令控件尽量保留在Ribbon界面上。通过这样的方式,可以让用户始终可以很快地找到最常用的命令控件。
 

  到此为止,我们基本上可以利用XML对Ribbon界面的各个元素进行定义了,同时能够控制Ribbon界面在各种尺寸下的显示状态,可以说跟界面相关的工作已经基本完成了。接下来的任务就是对控件的消息进行响应,以完成相应的业务逻辑。这回我们就说到这里,要知后事如何,且听下回分解。

1
相关文章