wpf - 从 WPF 功能区创建下拉 'panel' 区域?

标签 wpf xaml ribbon system.windows.controls.ribbon

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

示例:RibbonMenuButton , RibbonSplitButton , RibbonMenuButton , RibbonGallery

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

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

enter image description here

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

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

这是我有兴趣了解的红色区域。

(我不知道 Outlook 是否是使用 WPF 功能区编码的,这根本不重要 - 我只是用它来说明我正在寻找的内容。)


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

最佳答案

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

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

关于wpf - 从 WPF 功能区创建下拉 'panel' 区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836366/

相关文章:

c# - WebBrowser 在 ObjectForScripting 上声明 "object type is not visible to COM"

c# - 嵌套 INotifyPropertyChanged 类不起作用

xaml - LongListSelector 不滚动

c# - 如何创建带有虚线边框或双线边框的文本框

xaml - 如何正确地将功能区库类别绑定(bind)到集合

ms-word - Word 2007 功能区 - 正确对齐组中的控件

c# - 在 wpf DataGrid 中单击 DataGridTemplateColumn 中的按钮时如何停止行选择

c# - 在内存中保存大量文本数据的正确策略是什么? System.Runtime.Caching 或自定义类?

wpf - 如何对 ObservableCollection 进行排序

excel - 在 Excel 2007 中自定义功能区时的 Blanc vbCritical VBA 消息