一、简介

本文将介绍用户控件UserControl与Page的区别,及两者的使用方法。

部分参考:

https://www.cnblogs.com/lelehellow/p/6026766.html(重点)

https://www.cnblogs.com/ZXdeveloper/p/4479721.html

https://www.cnblogs.com/denghejun/p/3671061.html

还有其他参考,见下文。

二、UserControl、ContentControl、Page性质、用法

1、三者,一定要放在Window下才能显示。若是在Prism架构中,一定要放在shell才能显示。

2、常情况下,一个window加载多个page,而运行的solution大都是一个window。

3、当微软自带的控件(比如button,canvas等)不足以满足开发者的需求,这是可以用到usercontrol啦。

4、ContentControl用来切换动态内容。

5、其他(若有其他区别,请大家告知我一下,我学习学习。非常感谢)

1、UserControl

1.1、性质

省略。UserControl是一定要放在Window中才能显示的。

1.2、用法

1.2.1、Window的Xaml直接添加

<Window x:Class="WpfApplicationDemo.UserControlDemo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:my="clr-namespace:WpfApplicationDemo.Control"Title="UserControlDemo" Height="300" Width="300" Loaded="Window_Loaded"><Grid><TextBlock Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBlock1" Text="下面是用户控件" VerticalAlignment="Top" /><StackPanel Height="175" HorizontalAlignment="Left" Margin="20,57,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="246" /><my:UserControl1 HorizontalAlignment="Left" Margin="38,46,0,0" x:Name="userControl11" VerticalAlignment="Top" Height="183" Width="406" /></Grid>
</Window>

1.2.2、Window的C#代码中直接添加

public partial class UserControlDemo : Window{public UserControlDemo(){InitializeComponent();}private void Window_Loaded(object sender, RoutedEventArgs e){UserControl1 demo = new UserControl1();this.stackPanel1.Children.Add(demo);}}

或者

1.2.3、Window下Frame.Content加载

https://blog.csdn.net/lordwish/article/details/52667150

UserControl control = obj as UserControl;
this.frame1.Content = control;

2、ContentControl

2.1、性质

内容控件ContentControl,往往用来加载动态内容,比如动态加载UserControl.xaml。

2.2、用法

2.2.1、contentControl.Content直接加载UserControl.xaml

contentControl.Content = userControl1

参考:https://blog.csdn.net/xm9304/article/details/46412349

2.2.2、Prism.MVVM架构中ContentControl区域可以动态切换用户控件UserControl

2.2.1、Prism.MVVM架构中ContentControl区域

3、Page

3.1、性质

参考1:https://blog.csdn.net/software_kid/article/details/9339847

Page 是从 UserControl 继承的,Page 封装了对 Frame 的导航,这也是 Page 的最大特点和职责,而 UserControl 没有这个职责。

参考2:https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.page?redirectedfrom=MSDN&view=netframework-4.7.2#适用于

封装一页可由 Windows Internet Explorer、NavigationWindow 和 Frame 导航到和承载的内容。

3.2、用法

由以上可以知道,Page可以被NavigationWindow 和 Frame加载。但是不同的方法,有缺点不一样。请参考:

https://blog.csdn.net/xpj8888/article/details/83022627

3.2.1、Frame.Navigate导航举例

<Window><Grid><Grid.RowDefinitions><RowDefinition Height="40"></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><WrapPanel VerticalAlignment="Center"><Button Name="btnA" Height="30" Width="60" Margin="5" Click="btnA_Click">页面A</Button><Button Name="btnB" Height="30" Width="60" Click="btnB_Click">页面B</Button></WrapPanel><Frame Name="frmMain" NavigationUIVisibility="Hidden"></Frame></Grid>
</Window>
        private void btnA_Click(object sender, RoutedEventArgs e){//注意:这里使用Navigate,不用Source,具体区别自己可以试试this.frmMain.Navigate(new Uri("PageA.xaml", UriKind.Relative));}private void btnB_Click(object sender, RoutedEventArgs e){this.frmMain.Navigate(new Uri("PageA.xaml", UriKind.Relative));}

3.2.2、Frame.Source加载

参考:https://blog.csdn.net/lordwish/article/details/52667150

 <Frame x:Name="Frame" Height="1092" Width="1920" Source="Views/StudyPage.xaml" NavigationUIVisibility="Hidden" Panel.ZIndex="1"/>

3.2.3、Frame.Content加载

https://blog.csdn.net/lordwish/article/details/52667150

private void btnA_Click(object sender, RoutedEventArgs e){PageA a = new PageA();this.frame.Content = a;a.ParentWindow = this;}

WPF 控件【U】UserControl(一) UserControl、ContentControl、Page的区别,及它们的使用方法相关推荐

  1. WPF控件开发之自定义控件(3)

    创建 UserControl 如前所述,在 WPF 中创建控件的最简单方法是从 UserControl 派生.下面的示例演示用于定义 NumericUpDownUserControl 的 用户界面 ( ...

  2. WPF控件开发之自定义控件(1)

    Windows Presentation Foundation (WPF) 控件模型的扩展性极大减少了创建新控件的需要.但在某些情况下,仍可能需要创建自定义控件.本主题讨论可最大限度减少在 Windo ...

  3. WPF控件之自定义TextBox控件

    首先我们要知道用户控件与自定义用户控件的确保 用户控件 1将多个现有的控件组合成一个可重用的"组". 2不能使用样式和模板. 3继承自UserControl类. 自定义控件 1在现 ...

  4. 如何使用必应地图 WPF 控件

    如何使用必应地图 WPF 控件 如何使用必应地图 WPF 控件 作者:WPFDevelopersOrg - 驚鏵 原文链接:https://github.com/WPFDevelopersOrg/WP ...

  5. wpf控件开发基础(1)

    从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...

  6. [转] 使用模板自定义 WPF 控件

      [转] 使用模板自定义 WPF 控件                                                                                 ...

  7. wpf控件设计时支持(1)

    wpf控件设计时支持(1) 原文:wpf控件设计时支持(1) 这部分内容几乎是大家忽略的内容,我想还是来介绍一下. 本篇源码下载 1.属性元数据 在vs IDE中,在asp.net,winfrom等开 ...

  8. wpf控件设计时支持(3)

    wpf设计时调试 编辑模型 装饰器 1.wpf设计时调试 为了更好的了解wpf设计时框架,那么调试则非常重要,通过以下配置可以调试控件的设计时代码 (1)将启动项目配置成外部的visual studi ...

  9. WPF开发人员必读:WPF控件测试台

    介绍 WpfControlTestbench帮助您为您的控件或您想要调查其行为的任何控件编写快速复杂的测试窗口.只需十几行XAML即可创建以下Window内容: 它在左下角显示你要测试的控件,在Win ...

最新文章

  1. linux间隔时间执行,科技常识:使用linux命令crontab间隔时间执行其它命令
  2. linux找不到动态链接库 .so文件的解决方法(转自:http://www.cnblogs.com/xudong-bupt/p/3698294.html)
  3. 社区奖品之原木双面记事板
  4. 基于TCP协议的网络程序(基础学习)
  5. python ios 坐标点击_python点击鼠标获取坐标(Graphics)
  6. Docker学习总结(53)—— Docker 十个非常实用但又容易忽视的使用技巧
  7. JavaScript 运行机制(EventLoop)详解:一篇文章全部搞懂事件循环
  8. 在面试中脱颖而出的流程全解
  9. 骑士游历问题——至少需要多少步
  10. Blend for Visual Studio 概述
  11. 联想电脑如何改w ndows更新,电脑是否能升级到Windows 8.1 及支持Windows 8.1系统的机型汇总...
  12. 转载:国学与古代文学的关系
  13. keil调试stm32MCU的时候没有黄色箭头的一个处理办法
  14. 用source函数代替繁冗的R语言打包过程
  15. 黑炫酷的监控界面,实际上是用了什么开源工具?
  16. 人工智能:图像数字化相关的知识介绍
  17. 七日年化收益率(折线图)
  18. 小程序助力博物馆餐厅,用“艾”打造品牌
  19. JMP官方网络课程 | DOE结果的可视化呈现
  20. Python每日一练-----完美数

热门文章

  1. STL--C++中 destory() 和deallocate()以及delete函数的相关性和区别性,destorydeallocate
  2. gmail imap_阻止带有Gmail IMAP的Outlook在待办事项栏中显示重复的任务
  3. 只用200行Go代码写一个自己的区块链!
  4. 【office】Visio 2016 画大括号(花括号) + 调整花括号尖角居中
  5. 解决vue项目格式报错问题_@jie
  6. The Google File System 中文版论文(下)(转载)
  7. matlab计算sinx近似值,《Matlab与数学实验》期末作业
  8. Win-mac版 AE 2018安装附教程
  9. HTML基础知识笔记-01
  10. VMware9虚拟机和Fedora12安装-实现Windows和Linux文件共享