最良の方法は、最初にグリッドコントロールを使用して、次のようにコントロールをレイアウトすることです(Blamが提案したように)。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Menu control. (Whichever you see fit. The menu could be established
within this control, or you could use a custom UserControl depending
on your needs.) -->
<StackPanel />
<!-- Content control -->
<ContentPresenter Name="ContentHolder"
Grid.Column="1" />
</Grid>
デザインパターンに応じて、コンテンツを希望どおりに表示する方法がいくつかあります。
MVVMを使用している場合は、次のように、ContentPresenterコントロールをメインウィンドウのデータコンテキストのViewModelにバインドできます。
<ContentPresenter Name="ContentHolder"
Grid.Column="1"
Content="{Binding ContentData}" />
そして、対応するプロパティがViewModelに存在します。たとえば、次のようになります。
public ViewModelBase ContentData{
get { return _contentData; }
}
それがあなたにとってギリシャ語が多い場合は、おそらくMVVMをデザインパターンとして使用していません。その場合、メインウィンドウクラスの背後にあるコードは、イベントハンドラーを使用してContentPresenterのコンテンツの設定を処理できます。
イベントハンドラーの要点は次のようになります。
public void HandleNavigationChange(SwitchCondition sc){
UserControl newContent = null;
switch (sc) {
case SwitchCondition.NavigationItem1:
newContent = new NavigationItem1();
break;
case SwitchCondition.NavigationItem1:
newContent = new NavigationItem1();
break;
//ETC
}
ContentHolder.Content = newContent;
}
次に、メニュー項目のクリックから、または必要に応じて子コントロールからこのメソッドを呼び出すことができます。