WPF功能区4.0 - 控制级别的大小定义

时间:2011-03-02 00:10:37

标签: wpf ribbon

我已定义类似这样的内容

<ribbon:RibbonGroup Header="Size at Control Level">
                    <ribbon:RibbonControlGroup>
                        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 1">
                            <ribbon:RibbonButton.ControlSizeDefinition>
                                <ribbon:RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True"></ribbon:RibbonControlSizeDefinition>
                            </ribbon:RibbonButton.ControlSizeDefinition>
                        </ribbon:RibbonButton>
                        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 2">
                            <ribbon:RibbonButton.ControlSizeDefinition>
                                <ribbon:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"></ribbon:RibbonControlSizeDefinition>
                            </ribbon:RibbonButton.ControlSizeDefinition>
                        </ribbon:RibbonButton>
                        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 3"></ribbon:RibbonButton>
                        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 4"></ribbon:RibbonButton>
                    </ribbon:RibbonControlGroup>
                </ribbon:RibbonGroup>

但所有按钮都很大。即使我为所有控件设置了一个带有Small的ControlSizeDefinition属性,它们仍然很大。我做错了什么?

谢谢!

4 个答案:

答案 0 :(得分:5)

MSDN: Ribbon Layout and Resizing开始(大约在页面的一半处以小文字显示):

控制组 -
相关的功能区控件可以在RibbonControlGroup中组合在一起。调整控件组的大小时,一个RibbonControlSizeDefinition将应用于RibbonControlGroup中的所有控件。 RibbonControlGroup位于RibbonGroup中,就像它是一个控件一样。

因此,如果多个RibbonButton位于公共RibbonControlGroup中(如您的示例所示),那么它们将始终共享相同的RibbonControlSizeDefinition。在WPF功能区的当前状态下,您将无法指定不同的大小。您需要以不同方式对它们进行分组以实现此类效果。 (也许把它们放在一个包裹在边框内的堆叠面板中......但是我担心将非色带控件放在色带上有时会破坏色带内置的漂亮功能。)

我怀疑你真的不打算将所有四个按钮放在一个控制组中。 RibbonControlGroup旨在“将非常密切相关的按钮粘合在一起”,因此在一个按钮结束和下一个按钮开始之间有0个间距。这对于不同尺寸的按钮不起作用。我想你可能只想将你的按钮直接放在功能区组中,因为它应该是告诉用户按钮以某种方式相关的容器。

另外注意事项:您可以在RibbonControlGroup上指定一个大小定义,该大小定义将应用于其中的所有四个按钮,如下所示:

<ribbon:RibbonGroup Header="Size at Control Level">
    <ribbon:RibbonControlGroup>
        <ribbon:RibbonControlGroup.ControlSizeDefinition>
            <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="False" />
        </ribbon:RibbonControlGroup.ControlSizeDefinition>
        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 1" />
        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 2" />
        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 3" />
        <ribbon:RibbonButton SmallImageSource="Images\wizard-icon16.png" LargeImageSource="Images\wizard-icon32.png" Label="Button 4" />
    </ribbon:RibbonControlGroup>
</ribbon:RibbonGroup>

答案 1 :(得分:1)

你没有做错任何事。功能区工具栏会自动缩放图像。如果它占用空间,它将使用较小的图像作为您指定的小图像,并继续使用较大的图像作为您指定的大图像。但是,如果有显示大图像的空间,如果可以,它就会这样做。

在填充功能区栏时,您会看到此行为。

答案 2 :(得分:0)

如果设置SmallImageSource但未设置LargeImageSource,则该按钮应默认为小尺寸。

答案 3 :(得分:0)

类似于Scotts的回答,但是您可以独立定义RibbonButtons的大小,而不仅是组项目的大小。 https://stackoverflow.com/a/8601891/9758687