news 2026/7/5 10:55:39

wpf之行为

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
wpf之行为

前言

行为是WPF中用于增强UI元素功能的一种重要模式,它允许在不修改原始控件代码的情况下,为控件添加交互逻辑。它可以封装某些功能(如拖放、命令执行、状态管理等),使这些功能可以在不同控件间复用

1、新建行为类

下面的代码给所有控件添加一个行为,添加行为分为两个步骤,第一步就是新建一个类继承Behavior,第二步就是在view视图代码中给指定的控件附加行为, Behavior中的T用于指定行为可以用在哪种控件上,这里使用了Control,由于Control是所有控件的基类,所以所以这个行为可以被所有控件使用,当鼠标进入控件时(在控件上方)更改控件的字体颜色为黄色,当鼠标离开控件时恢复控件原来的字体颜色。行为主要是重写OnAttached和OnDetaching方法,在OnAttached方法中订阅事件,在OnDetaching方法方法中取消订阅事件。下面的代码中在OnAttached订阅了MouseEnter和MouseLeave两个事件。

classChangeForegroundBehavior:Behavior<Control>{privateBrushoriginalForeground;privatestaticreadonlyBrushhoverBrush=Brushes.Yellow;protectedoverridevoidOnAttached(){base.OnAttached();originalForeground=AssociatedObject.Foreground;AssociatedObject.MouseEnter+=OnMouseEnter;AssociatedObject.MouseLeave+=OnMouseLeave;}protectedoverridevoidOnDetaching(){base.OnDetaching();// 取消订阅事件AssociatedObject.MouseEnter-=OnMouseEnter;AssociatedObject.MouseLeave-=OnMouseLeave;}privatevoidOnMouseEnter(objectsender,MouseEventArgse){// 当鼠标进入时,改变字体颜色AssociatedObject.Foreground=hoverBrush;}privatevoidOnMouseLeave(objectsender,MouseEventArgse){// 当鼠标离开时,恢复字体颜色AssociatedObject.Foreground=originalForeground;}}

2、给指定控件添加行为

下面的代码中分别给Label 和Button添加ChangeForegroundBehavior行为,

<Windowx:Class="行为.MainWindow"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:行为"xmlns:i="http://schemas.microsoft.com/xaml/behaviors"xmlns:ei="clr-namespace:Microsoft.Xaml.Behaviors.Core;assembly=Microsoft.Xaml.Behaviors"mc:Ignorable="d"Title="MainWindow"Height="450"Width="800"><Grid><Grid.RowDefinitions><RowDefinitionHeight="1*"/><RowDefinitionHeight="1*"/></Grid.RowDefinitions><Label Grid.Row=" 0"Content="test"Width="100"Height="30"Foreground="Red"Background="Blue"FontSize="15"><i:Interaction.Behaviors><local:ChangeForegroundBehavior/></i:Interaction.Behaviors></Label><Button Grid.Row=" 1"Content="test"Width="100"Height="30"Foreground="Red"FontSize="15"><i:Interaction.Behaviors><local:ChangeForegroundBehavior/></i:Interaction.Behaviors></Button></Grid></Window>

1)鼠标放在Label上方时

2)鼠标离开Label上方时

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/21 17:40:46

道路直播:以安全为基,藏温暖于行

清晨的早高峰&#xff0c;您是否曾因堵车而焦虑&#xff1f;傍晚的归家路&#xff0c;您是否想提前避开事故路段&#xff1f;过年返乡时&#xff0c;您是否想规划最优返乡路线&#xff1f; 城市与高速道路的运转时刻不停&#xff0c;掌握实时交通动态&#xff0c;既是提升出行效…

作者头像 李华
网站建设 2026/7/1 8:41:13

大模型应用开发入门:从零理解RAG、Token与向量数据库

本文从开发者视角详解大模型应用开发核心概念&#xff1a;介绍LLM本质与Token计算方法&#xff0c;详解RAG架构如何解决知识过时、幻觉和私有数据安全问题&#xff0c;阐述向量数据库在检索中的作用&#xff0c;对比RAG与私有数据训练的优劣&#xff0c;强调提示词工程对应用效…

作者头像 李华
网站建设 2026/7/2 1:50:49

nodejs养猫宠物用品商城咖私人影院系统的设计与实现-vue

文章目录 系统概述技术栈功能模块系统特色部署方案 --nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 Node.js养猫宠物用品商城与私人影院系统是一个结合电商与娱乐功能的综合性平台&#xff0c;采用前后端…

作者头像 李华
网站建设 2026/7/2 2:33:37

基于Springboot+Vue的学生社团管理系统源码文档部署文档代码讲解等

课题介绍 本课题旨在设计并实现一套基于SpringBootVue的前后端分离学生社团管理系统&#xff0c;解决校园内学生社团注册审批繁琐、成员管理混乱、活动组织低效、社团信息传播不及时、数据统计不便等问题。系统采用SpringBoot作为后端核心框架&#xff0c;结合MyBatis-Plus简化…

作者头像 李华
网站建设 2026/6/29 13:53:23

基于微信小程序的课堂考勤签到系统(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并实现一套基于微信小程序的课堂考勤签到系统&#xff0c;解决传统课堂考勤耗时费力、代签现象频发、考勤数据统计繁琐、考勤记录不易留存、教师与学生考勤交互不便等问题。系统采用SpringBoot作为后端核心框架&#xff0c;结合MyBatis-Plus简化考勤数据…

作者头像 李华