C# 在WPF中的页面之间进行更改

C# 在WPF中的页面之间进行更改,c#,wpf,blend,C#,Wpf,Blend,我想做一个像在任何网站使用的布局-页眉,侧边栏和页脚保持不变,但中心部分。我有多个页面/窗口要在wpf blend C#应用程序中显示,它们完全不同。例如,stackoverflow的主页有一个布局,每个问题有一个布局。下面是另一个例子: 在以前的一个项目中,我必须这样做,我使用了一个网格布局,然后,对于每个页面,我必须隐藏()所有页面,并显示顶部的每个页面- 有什么诀窍?如何在wpf应用程序中执行相同的操作?在一个典型的C#应用程序中,我每次都必须打开一个子窗口,但这看起来很难看 提前谢谢

我想做一个像在任何网站使用的布局-页眉,侧边栏和页脚保持不变,但中心部分。我有多个页面/窗口要在wpf blend C#应用程序中显示,它们完全不同。例如,stackoverflow的主页有一个布局,每个问题有一个布局。下面是另一个例子:

在以前的一个项目中,我必须这样做,我使用了一个网格布局,然后,对于每个页面,我必须隐藏()所有页面,并显示顶部的每个页面-

有什么诀窍?如何在wpf应用程序中执行相同的操作?在一个典型的C#应用程序中,我每次都必须打开一个子窗口,但这看起来很难看


提前谢谢你

听起来您需要一个自定义的usercontrol和一些数据绑定

您可以将XAML中的数据模板声明为模型类型为键的资源,以便WPF自动选择正确的数据模板:

  • 有一个主ViewModel,它公开ImageSourceViewModel属性。此属性将根据需要返回CameraSourceViewModel或FileSourceViewModel

  • 在您的页面中,DataContext将是主ViewModel,您将拥有如下XAML:

  • NextPage page = new NextPage();
    NavigationService.Navigate(page);
    
那么



我应该指出,这个例子使用MVVM模式来允许VIEW模型层决定中间的内容。希望这是足够清楚,如果没有,给我一个叫喊,我会尝试扩大它

假设我有一个主视图模型,我在其中创建了一个CurrentPage属性,它将告诉您要显示哪个页面

/// <summary>
/// Returns the page ViewModel that the user is currently viewing.
/// </summary>
public ViewModelBase CurrentPage
{
    get { return _currentPage; }
    private set
    {
        if (value != _currentPage)
        {
            if (_currentPage != null)
                _currentPage.IsCurrentPage = false;

            _currentPage = value;

            if (_currentPage != null)
                _currentPage.IsCurrentPage = true;
            RaisePropertyChanged(() => CurrentPage);
        }
    }
}
//
///返回用户当前正在查看的页面视图模型。
/// 
公共视图模型库当前页
{
获取{return\u currentPage;}
专用设备
{
如果(值!=\u当前页面)
{
如果(_currentPage!=null)
_currentPage.IsCurrentPage=false;
_currentPage=值;
如果(_currentPage!=null)
_currentPage.IsCurrentPage=true;
RaisePropertyChanged(()=>CurrentPage);
}
}
}
在xaml中,您可以在某种控制下绑定页面。假设我是在一个Border元素中进行的


您可以在参考资料中为视图模型定义视图,如下所示:
(部分完成的XAML)



看看这是否有帮助

如果要在WPF中使用
Page
s,则需要阅读MSDN上的页面。但是,简而言之,您可以通过使用在WPF应用程序中的
页面
之间导航。要从代码隐藏更改页面,可以执行以下操作:

NextPage page = new NextPage();
NavigationService.Navigate(page);
要让用户更改
页面
,您可以在
页面
中使用:

<Hyperlink NavigateUri="pack://application:,,,/AppName;component/Pages/NextPage.xaml">
    Navigate to Next Page
</Hyperlink>

您可以创建一个主窗口,主机usercontrols取决于您的需求。此外,您还可以使用另一个选项来执行类似的操作。在主窗口中创建所需的布局。保持帧控制在任何需要更改的位置。并根据用户操作显示页面。用于.NET Framework 4.5的
导航概述
MSDN页面似乎已被删除/损坏,但您仍然可以找到。非常感谢@Merlin2001。。。我现在已经更新了链接。
<Frame Source="pack://application:,,,/AppName;component/Pages/SomePage.xaml" />