带有Ribbon控件的DockPanel和用户控件UI

时间:2010-12-31 14:44:54

标签: wpf user-interface user-controls ribbon

我有一个带有多个按钮的功能区控件,需要在窗口的主区域中显示不同的窗口/用户控件。我正在考虑为每个“功能区”创建一个用户控件,它与功能区中的按钮相关。

这样的东西
Public Class RibbonViewModel
Public ReadOnly ucPreferences As UserControl = New ucPreferences
Public ReadOnly ucMain As UserControl = New ucMain
End Class

用户点击“首选项”按钮,我会

dockMain.Children.Clear()
dockMain.Children.Add(oRibbon.ucPreferences)

就布局而言,这是有效的,但我不确定我可能会遇到什么问题。

1 个答案:

答案 0 :(得分:1)

这肯定有用;然而,一种更强大的方法是利用棱镜......更具体地说是IRegionManager

这提供了一种在应用程序中定义区域的方法,您可以将区域推送到区域内。一个例子是......

    <ad:DockingManager Grid.Row="1" Margin="0">
        <ad:DocumentPane x:Name="WorkspaceRegion" prismrgn:RegionManager.RegionName="WorkspaceRegion"/>
    </ad:DockingManager>

...其中adAvalonDock程序集的命名空间;但是它可能是你的DockPanel一样的。然后可以在后面的代码中引用它,如下所示......

    _regionManager.AddToRegion("WorkspaceRegion", workspaceContent);
    _regionManager.Regions["WorkspaceRegion"].Activate(workspaceContent);

...其中_regionManager是通过DI在workspaceContent中放置WorkspaceRegion的对象的构造函数中收到的实例。

这为Ribbon动作提供了很好的解耦,它将驱动为该给定动作显示界面。它还提供了区域本身的抽象,即..它是DockPanel或其他控件。

如前所述,您的初步方法将有效。您是否应该选择像Prism这样的框架来隔离问题以及增加功能,这取决于现在和将来该项目的规模。