2010-12-31 11 views
0

リボンコントロールには、ウィンドウのメインエリアに異なるウィンドウ/ユーザーコントロールを表示する必要がある複数のボタンがあります。リボンのボタンに関連する各「機能領域」のユーザーコントロールを作成することを考えています。リボンコントロール付きDockPanelとユーザーコントロールUI

何か

​​

のようなユーザーは、好みのボタンをクリックすると、私はこれは限りレイアウトが行くよう

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

を働いているんでしょうが、私は、私が実行される可能性どのような問題はよく分かりませんに。

答えて

1

これは間違いなく機能します。しかし、より堅牢なアプローチは、プリズム...より具体的にはIRegionManagerを使用することになります。

これは、アプリケーション内で地域内でコンテンツをプッシュできる地域を定義する方法です。例はadAvalonDockアセンブリの名前空間です...

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

...だろう。しかし、あなたのDockPanelはまったく同じである可能性があります。これは次のように後ろにコードで参照することができ...

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

... _regionManagerWorkspaceRegionworkspaceContentを配置するオブジェクトのコンストラクタ内DIを介して受信されたインスタンスです。

これは、特定のアクションに対して表示されるインターフェイスを駆動する、Ribbonアクションに関して素晴らしいデカップリングを提供します。また、領域自体に抽象化を提供します。つまり、DockPanelまたは他のコントロールです。

前述のように、最初のアプローチが有効です。懸念と機能性を分離するためにプリズムなどのフレームワークを選択する必要があるかどうかは、現在および将来の両方でこのプロジェクトの規模に依存します。

+0

偉大な答えと説明!私は一部の人々がここで働いていることを知っているので、私はプリズムオプションを調べます。これは、私がユーザーコントロールのドッキングオプションにとどまる可能性があるので、*成長してはならない小さなプロジェクトです。 – knockando

関連する問題