Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 控件之间的WPF更改_.net_Wpf_Visual Studio 2010_Wpf Controls_Devexpress - Fatal编程技术网

.net 控件之间的WPF更改

.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

我有一个简单的应用程序,其中有一个包含一些操作的主屏幕,还有第二个屏幕,当第一个屏幕完成并按下按钮时,您可以访问该屏幕。如图所示:

棕色区域是固定的左侧菜单,始终显示在同一位置。 蓝色区域是从一个屏幕切换到另一个屏幕的区域。 红色区域正在尝试从Windows窗体模拟MDI容器

如何将该容器模拟为

  • 保留左侧静态菜单

  • 由于某些事件/操作而动态更改我的内容?

  • 
    私有无效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;
        }