我有一个简单的应用程序,它有一个主屏幕和一些操作,还有第二个屏幕,当你完成第一个操作并按下按钮时会访问它。参见以下图片:
棕色区块是固定的左侧菜单,将始终出现在相同位置。
蓝色区块是从一个屏幕切换到另一个屏幕。
红色区域试图模拟 WindowsForms 中的 MDIContainer。
如何模拟容器来:
![enter image description here](https://istack.dev59.com/JsMn6.webp)
如何模拟容器来:
保持静态菜单栏
根据某些事件/操作动态更改内容?
保持静态菜单栏
根据某些事件/操作动态更改内容?
最好的方法是首先使用网格控件来布局控件(如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>
<ContentPresenter Name="ContentHolder"
Grid.Column="1"
Content="{Binding ContentData}" />
您的ViewModel中会有一个相应的属性,例如:
public ViewModelBase ContentData{
get { return _contentData; }
}
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;
}
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Static"/>
<ContentControl x:Name="content1" Grid.Row="0" Grid.Column="1" Visibility="Visible" >
<StackPanel>
<TextBlock Text="One" />
<Button Click="btn1_click" Content="Button1"/>
</StackPanel>
</ContentControl>
<ContentControl x:Name="content2" Grid.Row="0" Grid.Column="1" Visibility="Hidden" >
<StackPanel>
<TextBlock Text="Two" />
<Button Click="btn2_click" Content="Button2"/>
</StackPanel>
</ContentControl>
</Grid>
private void btn1_click(object sender, RoutedEventArgs e)
{
content1.Visibility = System.Windows.Visibility.Hidden;
content2.Visibility = System.Windows.Visibility.Visible;
}
private void btn2_click(object sender, RoutedEventArgs e)
{
content1.Visibility = System.Windows.Visibility.Visible;
content2.Visibility = System.Windows.Visibility.Hidden;
}
如果您可以将按钮放在菜单区域之上
可以为我执行帧和页面内容的动态操作
此示例演示向页面构造函数传递数据
nextPage是一个页面
也可以是一个用户控件
<Frame Name="SrchItemEditField" />
PageDocFieldDetail nextPage = new PageDocFieldDetail(df);
SrchItemEditField.Content = nextPage;