从WPF功能区创建下拉“面板”区域?

时间:2019-04-24 18:22:59

标签: wpf xaml ribbon

WPF功能区(System.Windows.Controls.Ribbon)包含许多控件,您可以将其添加到功能区中,这些控件具有“下拉”样式的行为,单击控件的主按钮将为您显示一个新区域。

示例:RibbonMenuButtonRibbonSplitButtonRibbonMenuButtonRibbonGallery

但是,据我所知,所有这些内容都旨在向您显示用户从中进行选择的内容列表 。但是,相反,有什么方法可以显示一个不可选择的“面板”区域,可以在其上放置其他控件?

作为示例,这是MS Outlook的屏幕截图:

enter image description here

上方红色区域本身不是列表中的选择。相反,它具有一个自定义控件(用于选择表大小的东西)。

但是蓝色项目是可以选择的项目,其功能类似于传统菜单。

它是我感兴趣的红色区域。

(我不知道Outlook是否使用WPF功能区进行了编码,这一点都没有关系-我只是将其用作所寻找内容的说明。)


注意-我并不是要专门复制此Outlook表选择器,它只是您可以在下拉区域内使用不可选择的“面板”区域的方式的一个示例。

2 个答案:

答案 0 :(得分:1)

Microsoft RibbonMenuButton / RibbonSplitButton 不支持下拉列表中的自定义控件。

即使我们设法通过更改 RibbonMenuItem / RibbonGalleryItem 的内容来做到这一点,我们仍然会在鼠标悬停时在这些控件周围获得选择装饰

最好的方法是使用 RibbonToggleButton 和 Popup Control 的组合,如下所示

然后你可以在弹出控件中放置任何你想要的自定义控件

<StackPanel Orientation="Vertical">
<RibbonToggleButton
            x:Name="yAxis"
            Label="Y Axis"
            SmallImageSource="..\Images\ChartYAxis16.png"
            LargeImageSource="..\Images\ChartYAxis32.png"
            RibbonTwoLineText.HasTwoLines="True"
            RibbonTwoLineText.PathData="M 0 0 L 2.5 3 L 5 0 Z">
        </RibbonToggleButton>
        <Popup
            IsOpen="{Binding IsChecked, ElementName=yAxis}">
            <mycontrols:AnyControl/>
        </Popup>
    </StackPanel>

enter image description here

当然,您可能需要通过取消选中切换按钮以编程方式关闭下拉列表,只要用户在切换按钮或下拉弹出窗口之外单击

答案 1 :(得分:0)

您可以将任何喜欢的东西放在功能区菜单按钮中。

例如:

    <Ribbon>
        <RibbonMenuButton Label="Button One">
            <Grid Height="100" Width="200">
                <TextBlock VerticalAlignment="Top" Text="AAAA"/>
                <TextBlock VerticalAlignment="Bottom" Text="ZZZZ"/>
            </Grid>
        </RibbonMenuButton>
    </Ribbon>

您要提取并更改功能区菜单按钮模板,以避免左侧的空白。