WPF关键组件代码示例

通过一个综合示例代码,展示WPF的关键组件,包括XAML、控件、数据绑定、样式和模板以及动画。这个示例创建一个简单的WPF应用程序,包含一个文本框、按钮和列表框,实现数据绑定、自定义样式和模板,以及按钮点击后的动画效果。

示例代码

1. XAML文件(MainWindow.xaml)

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="400" Width="600"><Window.Resources><!-- 样式定义 --><Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="FontSize" Value="16"/><Setter Property="Margin" Value="10"/></Style><!-- 数据模板 --><DataTemplate x:Key="ListBoxItemTemplate"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" FontWeight="Bold"/><TextBlock Text=" - " /><TextBlock Text="{Binding Age}" /></StackPanel></DataTemplate></Window.Resources><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><!-- 文本框 --><TextBox x:Name="txtName" Grid.Row="0" Width="200" Margin="10" PlaceholderText="Enter your name" /><!-- 按钮 --><Button Grid.Row="1" Content="Add to List" Click="Button_Click"/><!-- 列表框 --><ListBox Grid.Row="2" x:Name="lstPeople" ItemTemplate="{StaticResource ListBoxItemTemplate}" /><!-- 动画效果 --><Button Grid.Row="3" Content="Animate" Click="AnimateButton_Click" HorizontalAlignment="Center"/></Grid>
</Window>

2. 后台代码(MainWindow.xaml.cs)

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media.Animation;namespace WpfApp
{public partial class MainWindow : Window{public ObservableCollection<Person> People { get; set; }public MainWindow(){InitializeComponent();People = new ObservableCollection<Person>();lstPeople.ItemsSource = People;}private void Button_Click(object sender, RoutedEventArgs e){if (!string.IsNullOrWhiteSpace(txtName.Text)){People.Add(new Person { Name = txtName.Text, Age = 30 });txtName.Clear();}}private void AnimateButton_Click(object sender, RoutedEventArgs e){DoubleAnimation animation = new DoubleAnimation{From = 1.0,To = 0.0,Duration = new Duration(TimeSpan.FromSeconds(1)),AutoReverse = true};((Button)sender).BeginAnimation(OpacityProperty, animation);}}public class Person{public string Name { get; set; }public int Age { get; set; }}
}

关键组件详解

a. XAML

XAML文件定义了整个用户界面的布局和结构。通过XAML,可以直观地看到界面的组织方式和控件的排列。

b. 控件(Controls)

示例中使用了TextBoxButtonListBox控件。TextBox用于用户输入,Button用于触发事件,ListBox用于显示数据列表。

c. 数据绑定(Data Binding)

在后台代码中,使用ObservableCollection<Person>作为数据源,并绑定到ListBox控件的ItemsSource属性。通过这种方式,数据变化会自动反映在界面上。

People = new ObservableCollection<Person>();
lstPeople.ItemsSource = People;

d. 样式和模板(Styles and Templates)

在XAML文件的资源中定义了样式和数据模板。样式定义了按钮的外观,数据模板定义了列表框项的显示方式。

<Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="FontSize" Value="16"/><Setter Property="Margin" Value="10"/>
</Style><DataTemplate x:Key="ListBoxItemTemplate"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" FontWeight="Bold"/><TextBlock Text=" - " /><TextBlock Text="{Binding Age}" /></StackPanel>
</DataTemplate>

e. 动画(Animations)

在按钮点击事件处理程序中,定义了一个简单的双精度动画(DoubleAnimation),用于改变按钮的不透明度,实现淡入淡出的效果。

private void AnimateButton_Click(object sender, RoutedEventArgs e)
{DoubleAnimation animation = new DoubleAnimation{From = 1.0,To = 0.0,Duration = new Duration(TimeSpan.FromSeconds(1)),AutoReverse = true};((Button)sender).BeginAnimation(OpacityProperty, animation);
}

结论

通过这个综合示例,我们展示了WPF中的关键组件及其使用方法。XAML用于定义界面结构,控件用于构建用户界面,数据绑定简化了数据和界面的交互,样式和模板提高了界面的可定制性,动画则增强了用户体验。掌握这些组件和技术,能够帮助开发人员创建功能强大且用户友好的WPF应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析R语言的贝叶斯网络模型:构建、优化与预测;INLA下的贝叶斯回归;现代贝叶斯统计学方法;R语言混合效应(多水平/层次/嵌套)

目录 ①基于R语言的贝叶斯网络模型的实践应用 ②R语言贝叶斯方法在生态环境领域中的应用 ③基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ④基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估计、贝叶斯回归、…

react使用AntV

AntV使用&#xff08;https://antv.antgroup.com/&#xff09; import React, { useEffect } from "react"; // npm install antv/g2 import { Chart } from "antv/g2"; const Charts () > { function Ccc() { // 准备数据 const data [ { genre: …

【Linux】脚本shell script

shell是与Linux交互的基本工具 shell script是针对shell所写的脚本&#xff0c;解释执行&#xff0c;无需编译 注意事项 指令的执行是从上而下、从左而右的分析与执行&#xff1b; 指令、选项与参数间的多个空白都会被忽略掉&#xff1b; 空白行也将被忽略掉&#xff0c;并且…

抽象工厂模式(AbstractFactoryPattern)

文章目录 1.抽象工厂模式定义2.UML类图3.抽象工厂模式具体实现工厂模式实现单一产品族抽象工厂实现多产品族产品类工厂类使用 4.抽象工厂模式优缺点 1.抽象工厂模式定义 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 工厂方法模式是单一产…

2024电工杯B题食谱评价与优化模型思路代码论文分析

2024年电工杯数学建模竞赛B题论文和代码已完成&#xff0c;代码为B题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

计算机网络安全控制技术

1.防火墙技术 防火墙技术是近年来维护网络安全最重要的手段&#xff0c;但是防火墙不是万能的&#xff0c;需要配合其他安全措施来协同 2.加密技术 目前加密技术主要有两大类&#xff1a;对称加密和非对称加密 3.用户识别技术 核心是识别网络者是否是属于系统的合法用户 …

【设计模式深度剖析】【1】【结构型】【代理模式】| 玩游戏打怪、升级为例加深理解

&#x1f448;️上一篇:创建型设计模式对比 | 下一篇:装饰器模式&#x1f449;️ 目 录 代理模式定义英文原话直译如何理解&#xff1f; 3个角色UML类图1. 抽象主题&#xff08;Subject&#xff09;角色2. 代理类&#xff1a;代理主题&#xff08;Proxy Subject&#xff0…

UE5 OnlineSubsystem Steam创建会话失败解决方法

连接上Steam但是创建会话失败 解决方法 在DefaultEngine.ini中加上bInitServerOnClienttrue,这个其实在官方文档里用注释给出了&#xff0c;直接取消注释就行 删除项目目录中的Saved、Internmediate、Binaries目录 右键你的项目.uproject选择Generate Visual Studio project f…

ASP.Net MVC在控制台添加视图时没有模型类并且不能添加视图

情况如下&#xff1a; 解决方法&#xff1a; 1.查看vs能否创建asp.net mvc项目&#xff0c;这种情况一般是更换了vs打开老项目 2.点击跳转至修改安装选项界面 3.选择安装项即可 如果以上都有&#xff1a; 看看你的视图文件是否存在在项目中 也不能点击添加&#xff0c;如果…

探索数值分析的奥秘:掌握NumPy与Pandas基础

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、NumPy&#xff1a;数值计算的效率提升器 二、Pandas&#xff1a;数据处理与分析的利器 …

Linux文本三剑客之sed

set的定义&#xff1a; sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要么存储在一个命令文本文件中。 sed的执行过程&a…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…

【日记】今天好困(407 字)

正文 4T 硬盘降价了&#xff0c;好心动。虽然只降了 10 块钱……. 为什么硬盘这么贵啊&#xff01;哼。 柜面上杂事好多。虽然一天到晚见不到几个客户&#xff0c;但杂事就是很多。一个头两个大。也不知道从哪儿冒出来的这么多事。 芒果干到了&#xff01;还没去取&#xff0c;…

sql把一个表的某几列的数据存到另一个表里

一.如何用slq语句把一个表中的某几个字段的数据插入到另一个新表中&#xff0c;就要用下面这条slq语句&#xff1a; insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 这里有一点值得注意的是这2个字段要一一对应&#xff0c;并且按顺序。 二.如果另一个表是…

JAVASE之类和对象(1)

路虽远&#xff0c;行则将至&#xff1b;事虽难&#xff0c;做则必成。 主页&#xff1a;趋早——Step 专栏&#xff1a;JAVASE gitte&#xff1a;https://gitee.com/good-thg 引言&#xff1a; 这篇文章我们只介绍前半部分&#xff0c;下一篇文章会介绍剩下的部分。 目录 一、…

LeetCode 面试150

最近准备面试&#xff0c;我以前不愿意面对的 现在保持一颗本心&#xff0c;就是专注于算法思想&#xff0c;语言基础的磨炼&#xff1b; 不为速成&#xff0c;不急功近利的想要比赛&#xff0c;或者为了面试。 单纯的本心&#xff0c;体验算法带来的快乐&#xff0c;是一件非常…

Python操作MySQL数据库的工具--sqlalchemy

文章目录 一、pymysql和sqlalchemy的区别二、sqlalchemy的详细使用1.安装库2.核心思想3.整体思路4.sqlalchemy需要连接数据库5.使用步骤1.手动提前创建数据库2.使用代码创建数据表3.用代码操作数据表3.1 增加数据3.2 查询数据3.3 删除数据3.4 修改数据 一、pymysql和sqlalchemy…

2025秋招深度学习基础面试题(一)

01. 卷积和BN如何融合提升推理速度 Conv和BN的融合:在网络的推理阶段,可以将BN层的运算融合到Conv层中,减少运算量,加速推理。本质上是修改了卷积核的参数,在不增加Conv层计算量的同时,略去了BN层的计算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

数据仓库、数据中台、大数据平台之间的关系

数据行业经常会出现数据仓库、数据中台、大数据平台等概念&#xff0c;容易产生疑问&#xff0c;它们中间是相等&#xff0c;还是包含的关系&#xff1f; 数据中台和数据仓库概念的关系 数据中台概念是包含数据仓库的&#xff0c;数据仓库是数据中台中的一部分&#xff0c;包含…