在上面的代码中,我们定义了控件的各种属性,现在要将这些控件布置到Ribbon面板上,则需要Tab页面的缩放策略来控制了。所以,我们在XML文件的视图部分对控件进行布置并设置缩放策略:
<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界面在各种尺寸下的显示状态,可以说跟界面相关的工作已经基本完成了。接下来的任务就是对控件的消息进行响应,以完成相应的业务逻辑。这回我们就说到这里,要知后事如何,且听下回分解。