最好的方法是首先使用网格控件来布置控件(如 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;
}
然后,您可以从菜单项单击中调用此方法,或者如果您愿意,也可以从子控件中调用此方法。