开发者

DockPanel and User Control UI with Ribbon Control

开发者 https://www.devze.com 2023-02-01 18:26 出处:网络
I have a ribbon control with multiple buttons that need to display different windows/user control in the main area of the window.I\'m thinking about creating a user control for each \'functional area\

I have a ribbon control with multiple buttons that need to display different windows/user control in the main area of the window. I'm thinking about creating a user control for each 'functional area' that 开发者_StackOverflow社区relates to it's button in the ribbon.

Something like

Public Class RibbonViewModel
Public ReadOnly ucPreferences As UserControl = New ucPreferences
Public ReadOnly ucMain As UserControl = New ucMain
End Class

User clicks the Preference button and I'll do

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

This is working as far as the layout goes but I'm not sure what issues I might run into.


This will certainly work; however a more robust approach would be making use of Prism...more specifically the IRegionManager.

What this provides is a way to define regions within your application where you can push content to live within the region. An example would be...

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

...where ad is the namespace for the AvalonDock assembly; however it could be your DockPanel just the same. This can then be referenced in the code behind as follows...

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

...where _regionManager is an instance received via DI within the contructor of the object placing workspaceContent in the WorkspaceRegion.

This provides nice decoupling with regard to the Ribbon action which will drive the interface to be displayed for that given action. It also provides an abstraction on the region itself, ie..is it a DockPanel or some other control.

As stated previously your initial approach will work. Whether you should opt for a framework such as Prism to isolate concerns as well as increased functionality is dependent on the scale of this project both now and in the future.

0

精彩评论

暂无评论...
验证码 换一张
取 消