我将 Prism 与 Microsoft WPF 功能区一起使用,一切都运行良好,但上下文选项卡有问题。我在我的 Shell.xaml 中定义上下文选项卡:
<Ribbon:Ribbon.ContextualTabGroups>
<Ribbon:RibbonContextualTabGroup Header="CTG1" Visibility="Visible" Background="Red" />
<Ribbon:RibbonContextualTabGroup Header="CTG2" Visibility="Visible" Background="Blue" />
<Ribbon:RibbonContextualTabGroup Header="CTG3" Visibility="Visible" Background="Purple" />
<Ribbon:RibbonContextualTabGroup Header="CTG4" Visibility="Visible" Background="Green" />
<Ribbon:RibbonContextualTabGroup Header="CTG5" Visibility="Visible" Background="Orange" />
<Ribbon:RibbonContextualTabGroup Header="CTG6" Visibility="Visible" Background="Violet" />
</Ribbon:Ribbon.ContextualTabGroups>
通过这种方式,我可以在我的模块中引用那些上下文选项卡组,而且效果很好。但我想在模块中定义 contextualtabgroups。我想到定义一个区域:
<Ribbon:Ribbon.ContextualTabGroups x:Name="RibbonContextualTabs" prism:RegionManager.RegionName="RibbonContextualTabs" />
然后在我的模块中,我会有一个 UserControl,它为每个继承了 RibbonContextualTabGroup 并将它们注册到该区域...有没有办法只定义一个带有一些 ContextualTabGroup 的用户控件并将它们作为一个整体添加?例如:
<Ribbon:RibbonContextualTabContainer x:Class="Views.ContextualTabsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">
<Ribbon:RibbonContextualTabGroup Header="CTG1" Visibility="Visible" Background="Red" />
<Ribbon:RibbonContextualTabGroup Header="CTG2" Visibility="Visible" Background="Blue" />
<Ribbon:RibbonContextualTabGroup Header="CTG3" Visibility="Visible" Background="Purple" />
</Ribbon:RibbonContextualTabContainer>
作为 ContextualTabsView.xaml 并在我的模块中制作一个
_regionManager.RegisterViewWithRegion("RibbonContextualTabs", typeof (ContextualTabsView));
我不知道我是否清楚我要完成的目标,但我将不胜感激任何帮助。
谢谢。
最佳答案
前段时间我遇到了同样的问题(但我使用的是 Teleriks Ribbon Bar)。我找不到任何方法来从模块中添加选项卡,或者至少从 XAML 中添加选项卡。
我所做的是这样的服务:
public class RibbonService
{
public PrioritySet<RibbonTab> Tabs { get; private set; }
public PrioritySet<object> QuickAccess { get; private set; }
public PrioritySet<ContextualGroup> ContextualGroup { get; private set; }
}
这个类有以下结构:
这里的关键是 PrioritySet 类,为了简单起见,它只是一个集合,其中每个项目都有一个关联的优先级。
现在,如果在您的框架上注册了这样的服务,那么您可以从模块中添加选项卡。请记住,您的 shell 项目需要获取 RibbonService,然后将项目集合绑定(bind)到 Tabs 属性 - 请注意 PrioritySet 实现 INotifyCollectionChanged,因此如果功能区被绑定(bind),它的项目将自动更新。
此外,您还可以获得一些有趣的东西,例如从服务中组合标签。例如,一个模块可能只需要向功能区添加一个按钮,这可以很容易地完成
_ribbonService.Tabs.Add(new RibbonButton(){Header = "Button", Icon = new Uri("icon.png")})
在我的应用程序中,我有 Tabs > Groups > Buttons 所以每个模块都可以完全控制功能区。另请注意,您可以从模块中添加所需的所有项目,但模块不能从功能区中删除项目,除非它引用了它,或者是创建它的那个。
关于c# - 将多个元素添加到 Prism 区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231894/