news 2026/5/16 19:02:04

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/5/11 13:19:04

React Native for OpenHarmony:简易计算器应用的开发与跨平台适配实践

简易计算器应用的开发与跨平台适配实践 摘要1. 引言&#xff1a;为何选择计算器作为 OpenHarmony RN 入门项目&#xff1f;2. 技术栈与开发环境2.1 核心依赖版本 3. 核心状态管理设计3.1 状态流转逻辑3.2 使用 useCallback 优化性能 4. 核心计算逻辑实现4.1 基础计算函数4.2 等…

作者头像 李华
网站建设 2026/5/12 23:49:45

大数据计算机毕设之基于Python+Echart的学生心理健康数据可视化系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/14 11:44:19

Java 企业级 Agent 实战:完整工程模板 · 多 Agent + Graph 工作流落地指南

Java 企业级 Agent 实战:完整工程模板 多 Agent + Graph 工作流落地指南 🔥 关键词:Java / Spring Boot / Agent / 多 Agent 协作 / Graph Workflow / 企业级落地 一、为什么“企业级 Agent”不能只停留在 Demo? 很多 Agent 教程的问题只有一个: 它们只适合“玩模型”,…

作者头像 李华
网站建设 2026/5/12 12:11:51

Julia 元编程

Julia 元编程 引言 Julia 语言自2009年推出以来,以其高效的性能、强大的表达能力和简洁的语法在科学计算、数据分析、机器学习等领域获得了广泛的应用。而 Julia 元编程(Metaprogramming)则是 Julia 语言的一大特色,它允许开发者对 Julia 代码进行更深入的操控和扩展。本…

作者头像 李华