如何从 RibbonGroup 添加或删除项

How to add or remove item from RibbonGroup

我有一个功能区,其中有一些选项卡。在一个选项卡上,我有两个 RibbonGroups。我想要实现的是,当我单击位于 RibbonGroup 中的 RibbonMenuButton(第一个)时,我想将一些项目(例如其他 RibbonMenuButton)添加到 RibbonGroup no 2。如何使用 C# 实现此目的?

<Custom:Ribbon Name="RibbonMenu" HorizontalAlignment="Stretch" VerticalAlignment="Top" Loaded="RibbonLoaded" Grid.Row="0">
        <Custom:Ribbon.ApplicationMenu>
            <Custom:RibbonApplicationMenu KeyTip="F">
            </Custom:RibbonApplicationMenu>
        </Custom:Ribbon.ApplicationMenu>
        <Custom:RibbonTab Header="Home" KeyTip="H" >
            <Custom:RibbonGroup x:Name="ClipboardGroup" Header="Home">
            </Custom:RibbonGroup>
            <Custom:RibbonGroup x:Name="ConnectionGroup" Header="Connect">          
            </Custom:RibbonGroup>
        </Custom:RibbonTab>
        <Custom:RibbonTab Header="Script">
            <Custom:RibbonGroup x:Name="ScriptsGroup" Header="Scripts">
            </Custom:RibbonGroup>
        </Custom:RibbonTab>
        <Custom:RibbonTab Header="Charts">
            <Custom:RibbonGroup x:Name="chartsGroup" Header="Charts">
                <Custom:RibbonMenuButton Label="First Chart" Name="firstChart" LargeImageSource="Resources/chartIco.png" PreviewMouseLeftButtonDown="firstChart_MouseLeftButtonDown"/>
                <Custom:RibbonMenuButton Label="Second Chart" Name="secondChart" LargeImageSource="Resources/chartIco.png" PreviewMouseLeftButtonDown="secondChart_MouseLeftButtonDown"/>
            </Custom:RibbonGroup>
            <Custom:RibbonGroup x:Name="chartsTools" Header="Tools">
            </Custom:RibbonGroup>
        </Custom:RibbonTab>
</Custom:Ribbon>

这是我的代码示例。我想要实现的是,当我从 "chartsGroup" RibbonGroup 单击 RibbonMenuItem 时,我想将项目(checkboxex、textboxes 等)添加到 chartsTools RibbonGroup。

由于要显示的控件总是相同的,最简单的方法是将它们添加到 XAML 并将它们的 Visibility 设置为 Collapsed

然后你可以使用 RibbonMenuButton.MouseLeftButtonUpRibbonMenuButton.MouseLeftButtonDown EventHandler 或使用 Command 模式(如果你使用 MVVM 或类似的东西)。

在 Command/EventHandler 中,然后将与所选 RibbonMenuButton 相关的控件的 Visibility 设置为 Visible,将 Visibility Collapsed.

的不相关控件

在 MVVM 中,您必须将受影响控件的 Visibility 绑定到 ViewModel 上的某些内容,也许是布尔值(在这种情况下,您需要 boolean/Visibility 转换器),并从 Command.

中设置这些布尔值

如果您使用 ToggleButton 而不是那些 RibbonMenuButton,您也可以直接将控件的 Visibility 绑定到 Toggled 状态负责ToggleButton,当然你又需要一个转换器。或者绑定到 Enabled 状态,如果你想让它们变灰。

===================================

对于更模块化的方法,您有两种可能性:

  1. 沿用上述方法,但在将Visibility更改为Visible时添加if语句。我不确定您如何确定要启用哪些功能,但只要所有功能始终在主程序中并且您不想总是显示所有功能,那应该可以处理所有可能的情况。
  2. 使用依赖注入(最容易设置的可能是 MEF)。将 'extra' 方法及其 WPF 控件放在单独的 MEF 模块中。您还需要至少一个接口,最好将其放在第三个程序集中,然后由模块和您的主程序引用。在启动时使用 ImportMany 加载所有模块,然后使用 foreach 循环遍历该列表并从这些模块获取 WPF 控件。我认为您需要在接口中定义的两个或三个方法:
    • 一种获取需要添加到 RibbonGroup
    • 的实际功能区控件的方法
    • 一个方法returns某物来确定那个控件去哪里(在哪个group/which位置),这可能需要分成两种方法,如果你想指定一个组和一个该组中的位置
    • 可选:允许您为该模块设置当前对象的方法。因此,如果用户选择 he/she 想要处理的对象,则需要让每个模块知道它是哪个对象。要么让主程序在更改对象时在每个模块上设置该对象,要么创建由主程序实现的第二个接口,并在模块上为该接口使用 Import 。在模块的 eventhandler/command 中,您可以查询当前对象的主程序。