WPF实现页面的切换的示例代码

 更新时间:2023年01月30日 11:05:14   作者:鲤籽鲲  
本文主要介绍了WPF实现页面的切换的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

本文主要讲述如何在同一个窗体内,实现不同功能模块的页面切换。

一、准备工作

1.搭建一个简单的mvvm项目结构

在这里插入图片描述

首先搭建一个简单的项目框架,然后有红和绿两个页面,ViewModels中的Base 中简单实现了ICommand 和 INotifyPropertyChanged接口

二、实现

1.使用Frame控件的方式实现

利用Frame的Source 属性加载内部的控件,使用Frame的时候,用于切换的页面可以是UserControl 或者Page,如案例中使用的就是Page

实现代码如下:

<Window x:Class="WpfApp2.Views.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2.Views"
        xmlns:vm="clr-namespace:WpfApp2.ViewModels"
        mc:Ignorable="d"
        Title="MainView" Height="450" Width="800">
    <Window.DataContext>
        <vm:MainViewModel></vm:MainViewModel>
    </Window.DataContext>
    <DockPanel Grid.Column="0">
        <StackPanel Background="LightBlue">
            <RadioButton Command="{Binding ChangePageCommand}" CommandParameter="PageRedView.xaml" Content="红色" Margin="10"></RadioButton>
            <RadioButton Command="{Binding ChangePageCommand}" CommandParameter="PageGreenView.xaml" Content="绿色" Margin="10"></RadioButton>
        </StackPanel>
        <Frame NavigationUIVisibility="Hidden" Source="{Binding PageName}"/>
    </DockPanel>
</Window>


注意:这里的CommandParameter传入的是PageRedView.xaml文件

    public class MainViewModel:ViewModelBase
    {
        private string _pageName;

        public string PageName
        {
            get { return _pageName; }
            set { _pageName = value; OnPropertyChanged(); }
        }

        public ICommand ChangePageCommand { get; set; }

        public MainViewModel()
        {
            ChangePageCommand = new CommandBase(ChangePage);
        }

        private void ChangePage(object obj)
        {
            PageName = obj.ToString();
        }
    }

2.使用反射的方式实现

使用反射+ContentControl 的方式也可使用页面切换,不过该方式下ContentControl 的Content不可以承接Page,Page只有Frame 和Window可以承接,但是可以承接UserControl。
首先将红色和绿色两个界面修改为UserControl并命名为UserControlRed和UserControlGreen ,然后修改代码如下:

    <DockPanel Grid.Column="0">
        <StackPanel Background="LightBlue">
            <RadioButton Command="{Binding ChangePageCommand}" CommandParameter="UserControlRed" Content="红色" Margin="10"></RadioButton>
            <RadioButton Command="{Binding ChangePageCommand}" CommandParameter="UserControlGreen" Content="绿色" Margin="10"></RadioButton>
        </StackPanel>
        <ContentControl Content="{Binding MainContent}"/>
    </DockPanel>
  public class MainViewModel:ViewModelBase
    {
        private FrameworkElement mainContent;

        public FrameworkElement MainContent
        {
            get { return mainContent; }
            set { mainContent = value; OnPropertyChanged(); }
        }


        public ICommand ChangePageCommand { get; set; }

        public MainViewModel()
        {
            ChangePageCommand = new CommandBase(ChangePage);
        }

        private void ChangePage(object obj)
        {
        	//【 * 】这里需要拼接路径
            Type type = Type.GetType("WpfApp2.Views." + obj.ToString());
            MainContent = (FrameworkElement)System.Activator.CreateInstance(type);
        }
    }

3.实现效果

在这里插入图片描述

总结

到此这篇关于WPF实现页面的切换的示例代码的文章就介绍到这了,更多相关WPF 页面切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#操作 JSON方法汇总

    C#操作 JSON方法汇总

    本文给大家汇总了一下使用C#操作Json的方法,非常的简单实用,有需要的小伙伴可以参考下
    2015-10-10
  • C#调用JS的几种方法

    C#调用JS的几种方法

    这篇文章主要介绍了C#调用JS的几种方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • 使用C#连接并读取MongoDB数据库

    使用C#连接并读取MongoDB数据库

    这篇文章介绍了使用C#连接并读取MongoDB数据库的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#绘制中国国旗的方法

    C#绘制中国国旗的方法

    这篇文章主要介绍了C#绘制中国国旗的方法,以实例形式较为详细的分析了C#图形绘制的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • 关于C#中排序函数的总结

    关于C#中排序函数的总结

    下面小编就为大家带来一篇关于C#中排序函数的总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • C#实现动态执行字符串脚本(优化版)的示例代码

    C#实现动态执行字符串脚本(优化版)的示例代码

    这篇文章主要为大家详细介绍了C#如何实现动态执行字符串脚本(优化版),文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • C#操作Excel相关方法总结

    C#操作Excel相关方法总结

    这篇文章主要介绍了C#操作Excel相关方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)

    C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)

    这篇文章主要介绍了C#实现获取文本文件的编码一个类,本文给出类可以自动区分GB2312和UTF8,并同时给出了使用方法,需要的朋友可以参考下
    2014-09-09
  • C#使用动态规划解决0-1背包问题实例分析

    C#使用动态规划解决0-1背包问题实例分析

    这篇文章主要介绍了C#使用动态规划解决0-1背包问题,实例分析了C#动态规划算法的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C# 键值对数据排序代码

    C# 键值对数据排序代码

    这篇文章介绍了C# 键值对数据排序代码,有需要的朋友可以参考一下
    2013-11-11

最新评论