我有一个功能区,我有一些标签。在一个选项卡上,我有两个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。
答案 0 :(得分:1)
由于要显示的控件始终相同,最简单的方法是将它们添加到XAML中并将Visibility
设置为Collapsed
。
然后您使用RibbonMenuButton.MouseLeftButtonUp
或RibbonMenuButton.MouseLeftButtonDown
EventHandler或使用Command
模式(如果您正在使用MVVM或类似的东西)。
在Command / EventHandler中,您可以将与所选Visibility
到RibbonMenuButton
相关的控件的Visible
和Visibility
个无关控件设置为{ {1}}。
在MVVM中,您必须将Collapsed
受影响的控件绑定到Visibility
上的内容,可能是布尔值(在这种情况下,您需要ViewModel
/ { {1}}转换器),并从boolean
。
如果您使用的是Visibility
而不是Command
,那么您也可以直接将ToggleButton
控件绑定到RibbonMenuButton
状态责任Visibility
,您当然需要再次使用转换器。或者绑定到Toggled
状态,如果你想让它们变灰。
===================================
对于更模块化的方法,您有两种可能性:
ToggleButton
更改为Enabled
时添加if
语句。我不确定您如何确定启用哪些功能,但只要所有功能始终位于主程序中并且您不想总是显示所有功能,它应该可以处理所有可能的情况功能。Visibility
加载所有模块,然后使用Visible
循环遍历该列表,并从这些模块获取WPF控件。我认为您需要在界面中定义的两个或三个方法:
ImportMany
foreach
作为该接口。在模块的eventhandler /命令中,您可以在主程序中查询当前对象。