WPF - 自定义控件
上一节: WPF - 调试
上一节
下一节: WPF - 异常处理
下一节
WPF - 自定义控件
简述
WPF 应用程序允许创建自定义控件,这使得创建功能丰富且可自定义的控件变得非常容易。当 Microsoft 提供的所有内置控件都不满足你的条件或你不想为第三方控件付费时,将使用自定义控件。
在本章中,您将学习如何创建自定义控件。在开始查看自定义控件之前,让我们先快速浏览一下用户控件。
用户控制
用户控件提供了一种收集和组合不同内置控件并将其打包到可重用 XAML 中的方法。用户控件用于以下方案 −
如果控件由现有控件组成,即,您可以创建由多个已存在的控件组成的单个控件。
如果控件不需要支持主题。用户控件不支持复杂的自定义、控件模板和难以设置样式。
如果开发人员更喜欢使用代码隐藏模型编写控件,其中有视图,然后是事件处理程序的直接代码隐藏。
您不会在应用程序之间共享您的控制权。
例
让我们转到用户控件的示例,并按照下面给出的步骤操作。
创建一个新的 WPF 项目,然后右键单击解决方案并选择“添加新项>...”
将打开以下窗口。现在,选择“用户控件 (WPF)”并将其命名为“我的用户控件”。
单击“添加”按钮,您将看到将在解决方案中添加两个新文件(“我的用户控件”和“我的用户控件.cs”)。
下面是 XAML 代码,其中使用“我的用户控制”文件中的某些属性创建了一个按钮和一个文本框。
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable = "d" d:DesignHeight = "300" d:DesignWidth = "300"> HorizontalMoognment = "Left" Margin = "80,49,0,0" Name = "txtBox" VerticalMoognment = "Top" Width = "200" />
下面给出的是 MyUser控件中按钮单击事件的 C# 代码.cs更新文本框的文件。
using System;
using System.Windows;
using System.Windows.Controls;
namespace WPFUserControl {
///
/// Interaction logic for MyUserControl.xaml
///
public partial class MyUserControl : UserControl {
public MyUserControl() {
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e) {
txtBox.Text = "You have just clicked the button";
}
}
}
下面是在主窗口.xaml 中用于添加用户控件的实现。
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:control = "clr-namespace:WPFUserControl" Title = "MainWindow" Height = "350" Width = "525">
编译并执行上述代码时,将生成以下窗口。
单击“单击我”按钮后,您会注意到文本框中的文本已更新。
自定义控件
自定义控件是一个类,它提供自己的样式和模板,这些样式和模板通常在 generic.xaml 中定义。自定义控件用于以下方案 −
如果该控件不存在,则必须从头开始创建它。
如果要通过添加额外的属性或额外的功能来扩展或向预先存在的控件添加功能,以适合您的特定方案。
如果您的控件需要支持主题和样式。
如果要跨应用程序共享控件。
例
让我们通过一个示例来了解自定义控件的工作原理。创建一个新的 WPF 项目,然后右键单击解决方案并选择“添加新项>...”
它将打开以下窗口。现在,选择“自定义控件 (WPF)”并将其命名为“我的自定义控件”。
单击“添加”按钮,你将看到将在解决方案中添加两个新文件(“主题/通用.xaml”和“我的自定义控件.cs”)。
下面是为通用 .xaml 文件中的自定义控件设置样式的 XAML 代码。
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local = "clr-namespace:WPFCustomControls">
Here is the C# code for MyCustomControl class which is inherited from the button class and in constructor it overrides the metadata.
using System;
using System.Windows;
using System.Windows.Controls;
namespace WPFCustomControls {
public class MyCustomControl : Button {
static MyCustomControl() {
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new
FrameworkPropertyMetadata(typeof(MyCustomControl)));
}
}
}
下面是 C# 中的自定义控件单击事件实现,它更新文本块的文本。
using System;
using System.Windows;
using System.Windows.Controls;
namespace WPFCustomControls {
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void customControl_Click(object sender, RoutedEventArgs e) {
txtBlock.Text = "You have just click your custom control";
}
}
}
下面是在主窗口.xaml 中实现的,用于添加自定义控件和文本块。
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:control = "clr-namespace:WPFCustomControls" Title = "MainWindow" Height = "350" Width = "604"> Content = "Click Me" Width = "70" Margin = "10" Click = "customControl_Click"/> Width = "250" Height = "30"/>
当您编译并执行上述代码时,它将生成以下窗口,其中包含一个自定义控件,该控件是一个自定义按钮。
单击自定义按钮后,您将看到文本块内的文本已更新。
上一节: WPF - 调试
上一节
下一节: WPF - 异常处理
下一节
查看笔记 分享笔记
笔记内容:
称呼:
Email:
站点:
分享笔记 重置
分类导航
前端
Ajax 教程
Angular 教程
Aurelia 教程
Bootstrap 教程
ChartJS 教程
CSS 教程
ES6 教程
FontAwesome 教程
HTML 教程
HTML 字符集 教程
HTML 游戏 教程
JavaScript 教程
jQuery 教程
Less 教程
React 教程
Sass 教程
Stylus 教程
TypeScript 教程
Unity 教程
Vue.js 教程
WebAssembly 教程
XAML 教程
颜色 教程
服务端
C# 教程
C++ 教程
COBOL 教程
C语言 教程
Fortran 教程
Go 教程
Groovy 教程
Java 教程
JSP 教程
JVM 教程
Kotlin 教程
Lisp 教程
Lua 教程
Node.js 教程
Pascal 教程
Perl 教程
PHP 教程
Python 教程
Python 3 教程
Ruby 教程
Rust 教程
Scala 教程
Spring 教程
Spring Boot 教程
Spring Cloud 教程
VB.Net 教程
移动端
Android 教程
IOS 教程
Objective-C 教程
React Native 教程
Swift 教程
小程序 教程
数据库
Access 教程
DB2 教程
Mariadb 教程
Memcached 教程
MongoDB 教程
MySQL 教程
Neo4j 教程
PL/SQL 教程
PostgreSQL 教程
Redis 教程
SQL 教程
SQL Server 教程
SQLite 教程
T-SQL 教程
数据格式
Jackson 教程
JSON 教程
SVG 教程
XML 教程
开发工具
ActiveMQ 教程
Ant 教程
Apache HttpClient 教程
Apache POI PPT 教程
AWS 教程
Docker 教程
ElasticSearch 教程
ExpressJS 教程
GIT 教程
GitLab 教程
Google Maps 教程
Gradle 教程
Java NIO 教程
JavaFX 教程
JavaMail 教程
JDBC 教程
jMeter 教程
JPA 教程
jsoup 教程
Junit 教程
KoaJS 教程
Kubernetes 教程
Log4j 教程
Logstash 教程
Lucene 教程
Makefile 教程
Maven 教程
RESTful 教程
Sed 教程
SEO 教程
Servlet 教程
SLF4J 教程
Socket.IO 教程
Struts 教程
SVN 教程
TestNG 教程
UML 教程
UNIX / LINUX 教程
WebSocket 教程
WPF 教程
xStream 教程
区块链 教程
数据处理
Flink 教程
Flume 教程
Hadoop 教程
Hbase 教程
Hive 教程
Kafka 教程
Kibana 教程
MapReduce 教程
MATLAB 教程
MyBatis 教程
Pig 教程
R语言 教程
Solr 教程
Spark 教程
Storm 教程
Zookeeper 教程
大数据分析 教程
数据仓库 教程
数据挖掘 教程
计算机基础
HTTP 教程
IPv4 教程
IPv6 教程
Ubantu 教程
WebServices 教程
嵌入式系统 教程
操作系统 教程
数据结构和算法 教程
汇编语言 教程
物联网 教程
电子电路基础 教程
编译器设计 教程
网站开发 教程
计算机 教程
计算机基础 教程
计算机网络 教程
设计模式 教程
AI
CNTK 教程
Keras 教程
PyTorch 教程
TensorFlow 教程
人工智能 教程
机器学习 教程
Python 技术
Django 教程
Flask 教程
NumPy 教程
Pandas 教程
Pillow 教程
PyGTK 教程
PyQt5 教程
PySpark 教程
pytest 教程
Python -数据科学 教程
Python MySQL 教程
Python 取证 教程
Python 数据结构 教程
Python 文本处理 教程
Python 网络编程 教程
Python 网页抓取 教程
Python 设计模式 教程
RxPY 教程
SciPy 教程
Seaborn 教程
SymPy 教程
wxPython 教程
框架
Laravel 教程
Web 图标Icon 教程
Web2py 教程
WebGL 教程
WebRTC 教程
WordPress 教程
Yii 教程
Zend Framework 教程
SAP
Crystal Reports 教程