Expression Blendに見られるように、ドッキングツールボックスウィンドウシステムをどのように実装しますか。ツールボックスウィンドウは、タブまたはフローティングトップレベルウィンドウとして重なり合って、さまざまな方法で相互にドッキングできます。私のシステムは、ExpressionBlendとほとんど同じように動作するはずです。また、ドラッグしたときにツールボックスウィンドウがドッキングする視覚的な手がかりを得る方法は、まさに私が必要としているものです。
例外は1つだけです。ブレンドでは、すでにトップレベルになっている(切り離されている)ツールボックスウィンドウにドラッグすると、ウィンドウ全体を埋めるタブとしてのみドッキングできます。ただし、ツールボックスウィンドウとメインウィンドウに違いがないシステムが必要です。メインウィンドウと同じように、ツールボックスウィンドウでウィンドウを互いに下にドッキングできるようにする必要があります。
また、内部ポリシーにより、これにオープンソースまたはサードパーティのライブラリを使用することはできません。
このようなものの一般的なクラス設計をどのように設定するかに興味がありますか?さまざまなシナリオで使用できるように、できるだけ一般的なものにしたいと思います。
ドッキング動作は次の図のようになります。中央の画像は、意味のあるドラッグドッキング領域を示しています。そして、ウィンドウがスナップする外側の画像:
代替テキストhttp://img196.imageshack.us/img196/2450/dockingregions.png
一般的に、私はここで市長の問題に直面しています。プログラミングモデルを設計するにはどうすればよいですか(ドッキング構成をXAMLで永続化するにはどうすればよいですか)、基盤となる機能を実際に実装するにはどうすればよいですか。私が最初に考えたのは、DockPanelとTabControlの共生を実現したいということです。これの行の何か:
<DockTabControl>
<DockTabItem Dock="FirstLeft">
<DockTabItem.Header>
<TextBlock>Tab 1</TextBlock>
</DockTabItem.Header>
<!-- Tab 1 content -->
</DockTabItem>
<DockTabItem Header="Tab 2" Dock="SecondLeft" DockMode="MergeWithPreviousToTabgroup">
<!-- Tab 2 content -->
</DockTabItem>
<DockTabItem Header="Tab 3" Dock="FirstMiddle">
<!-- Tab 3 content -->
</DockTabItem>
</DockTabControl>
もちろん、これはまだ意味がありません。ドッキングをそのように定義することはできず、ウィンドウ処理の問題はここではまだ解決されていません。しかし、DockTabItemでいくつかのプロパティを定義するだけで、ドッキングとタブグループを定義するというアイデアが気に入っています。TabGroupsなどのような追加のコントロールを導入したくありません。子の順序とDockのアタッチされたプロパティを定義するだけで、DockPanelのドッキング動作が気に入っています。もちろん、私のドッキングはもう少し複雑になり、グリッドと同じように動作します。