如何在RibbonGroup中添加或删除项目

时间:2016-02-25 08:59:38

标签: c# wpf ribbon

我有一个功能区,我有一些标签。在一个选项卡上,我有两个RibbonGroup。我想要实现的是当我单击位于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>

这是我的代码示例。我想要实现的是当我点击RibbonGroup的RibbonGroup的RibbonMenuItem时,我想将项目(checkboxex,textboxes etx。)添加到chartsTools RibbonGroup。

1 个答案:

答案 0 :(得分:1)

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

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

在Command / EventHandler中,您可以将与所选VisibilityRibbonMenuButton相关的控件的VisibleVisibility个无关控件设置为{ {1}}。

在MVVM中,您必须将Collapsed受影响的控件绑定到Visibility上的内容,可能是布尔值(在这种情况下,您需要ViewModel / { {1}}转换器),并从boolean

中设置这些bool

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

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

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

  1. 使用上述方法,但在将ToggleButton更改为Enabled时添加if语句。我不确定您如何确定启用哪些功能,但只要所有功能始终位于主程序中并且您不想总是显示所有功能,它应该可以处理所有可能的情况功能。
  2. 使用依赖注入(最容易设置可能是MEF)。把&#39;额外&#39;方法及其WPF控件在单独的MEF模块中。您还需要至少一个接口,最好将其放在第三个程序集中,然后由模块和主程序引用。在启动时使用Visibility加载所有模块,然后使用Visible循环遍历该列表,并从这些模块获取WPF控件。我认为您需要在界面中定义的两个或三个方法:
    • 获取需要添加到ImportMany
    • 的实际功能区控件的一种方法
    • 一个方法返回一些东西来确定控件的去向(在哪个组/哪个位置),如果你想指定一个组和一个位于该组内的位置,这可能需要分成两个方法
    • 可选:允许您为该模块设置当前对象的方法。因此,如果用户选择他/她想要工作的对象,则需要让每个模块知道哪个对象。您可以让主程序在更改对象时在每个模块上设置该对象,或者创建第二个接口,该接口由主程序实现,并在模块上使用foreach作为该接口。在模块的eventhandler /命令中,您可以在主程序中查询当前对象。