.net 控件之间的WPF更改
我有一个简单的应用程序,其中有一个包含一些操作的主屏幕,还有第二个屏幕,当第一个屏幕完成并按下按钮时,您可以访问该屏幕。如图所示: 棕色区域是固定的左侧菜单,始终显示在同一位置。 蓝色区域是从一个屏幕切换到另一个屏幕的区域。 红色区域正在尝试从Windows窗体模拟MDI容器 如何将该容器模拟为:.net 控件之间的WPF更改,.net,wpf,visual-studio-2010,wpf-controls,devexpress,.net,Wpf,Visual Studio 2010,Wpf Controls,Devexpress,我有一个简单的应用程序,其中有一个包含一些操作的主屏幕,还有第二个屏幕,当第一个屏幕完成并按下按钮时,您可以访问该屏幕。如图所示: 棕色区域是固定的左侧菜单,始终显示在同一位置。 蓝色区域是从一个屏幕切换到另一个屏幕的区域。 红色区域正在尝试从Windows窗体模拟MDI容器 如何将该容器模拟为: 保留左侧静态菜单 由于某些事件/操作而动态更改我的内容? 私有无效btn1_单击(对象发送者,路由目标e) { content1.Visibility=System.Windows.Visibil
私有无效btn1_单击(对象发送者,路由目标e)
{
content1.Visibility=System.Windows.Visibility.Hidden;
content2.Visibility=System.Windows.Visibility.Visible;
}
私有无效btn2_单击(对象发送者,路由目标e)
{
content1.Visibility=System.Windows.Visibility.Visible;
content2.Visibility=System.Windows.Visibility.Hidden;
}
如果您可以像在菜单区域中一样将按钮置于上方可以使用框架和页面内容为我提供动态内容
此示例显示如何将数据传递给页面构造函数
下一页是一页
也可以是用户控件
<Frame Name="SrchItemEditField" />
PageDocFieldDetail nextPage = new PageDocFieldDetail(df);
SrchItemEditField.Content = nextPage;
PageDocFieldDetail下一页=新的PageDocFieldDetail(df);
SrchItemEditField.Content=nextPage;
最好的方法是首先使用网格控件来布置控件(如布拉姆建议的),如下所示:
如果您对这一点很不了解,那么您可能没有使用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;
}
然后,您可以通过菜单项单击调用此方法,或者如果愿意,也可以通过儿童控件调用此方法。有关处理此情况的通用方法,请参阅我的答案。谢谢Benjamin,非常有建设性!谢谢真的很容易理解,这正是我想要的!只是出于好奇:我做过一次,我记得我在主设计窗口之外画过面板。我正在使用Visual Studio进行设计。有没有办法在主窗口的不同位置设计contentcontrols,这样我们就可以避免设计重叠,并使它们显示在同一位置?请参见答案-使用页面的底部。
<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}" />
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;
}