我有一个带有多个按钮的功能区控件,需要在窗口的主区域中显示不同的窗口/用户控件。我正在考虑为每个“功能区”创建一个用户控件,它与功能区中的按钮相关。
像
这样的东西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)
就布局而言,这是有效的,但我不确定我可能会遇到什么问题。
答案 0 :(得分:1)
这肯定有用;然而,一种更强大的方法是利用棱镜......更具体地说是IRegionManager。
这提供了一种在应用程序中定义区域的方法,您可以将区域推送到区域内。一个例子是......
<ad:DockingManager Grid.Row="1" Margin="0">
<ad:DocumentPane x:Name="WorkspaceRegion" prismrgn:RegionManager.RegionName="WorkspaceRegion"/>
</ad:DockingManager>
...其中ad
是AvalonDock程序集的命名空间;但是它可能是你的DockPanel
一样的。然后可以在后面的代码中引用它,如下所示......
_regionManager.AddToRegion("WorkspaceRegion", workspaceContent);
_regionManager.Regions["WorkspaceRegion"].Activate(workspaceContent);
...其中_regionManager
是通过DI在workspaceContent
中放置WorkspaceRegion
的对象的构造函数中收到的实例。
这为Ribbon
动作提供了很好的解耦,它将驱动为该给定动作显示界面。它还提供了区域本身的抽象,即..它是DockPanel
或其他控件。
如前所述,您的初步方法将有效。您是否应该选择像Prism这样的框架来隔离问题以及增加功能,这取决于现在和将来该项目的规模。