当前位置: 首页 > news >正文

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上方时

http://www.jsqmd.com/news/343144/

相关文章:

  • Docker安装部署OpenClaw
  • 大数据毕设项目:基于Python+Echart的学生心理健康数据可视化系统设计与实现(源码+文档,讲解、调试运行,定制等)
  • 【无线充电车辆路线和速度预测】使用随机搜索优化方法同时具有路由和速度分配的模型研究附Matlab代码
  • 2026年休闲食品品牌推荐榜单:基于健康指标的选购指南 - Top品牌推荐
  • MAF快速入门(14)快速集成A2A Agent
  • 腾讯二面:1亿玩家实时排名,我答“Redis分桶”被挂!面试官:钻石局5000万人,你那个桶早炸了!
  • 【无线传感器网络】LEACH和LEACH-C协议研究附Matlab代码
  • 基于PageIndex的文档问答
  • P1941 [NOIP 2014 提高组] 飞扬的小鸟
  • Git与GitHub:深度解析与实用指南
  • TCP三次握手和四次断开 - 指南
  • 大数据计算机毕设之基于Python+Echart的学生心理健康数据可视化系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • OpenClaw/Memu/Nanobot
  • 【报告】东鹏饮料印尼落子:2亿美元携手华商巨头,共筑出海桥头堡
  • 在Docker中运行OpenClaw
  • GJ504b 的 React 进阶之路:Day 4
  • 【无线传感器网络】多级动态优化智能LEACH与成本效益深度信念网络附Matlab代码
  • 任何东西都可以转成 Base64!?
  • spring6-注解式开发
  • CodeChef - TREEQUER
  • AI应用开发从入门到精通:打破“调接口”误区,收藏这一篇就够了!
  • 【无人机协同路径规划】基于六种最新优化算法(TOC、MSO、AE、DOA、GOA、OX)求解多个无人机协同路径规划研究(可以自定义无人机数量及起始点)附Matlab代码
  • 大模型Agent应用开发教程(非常详细),手把手教你从零构建智能体!
  • 从 synchronized 到 ConcurrentHashMap:一个小小的并发控制策略升级优化,证明我还是初级程序员
  • Claude Code生成UI的3个技巧
  • 【无人水面艇】USV路径跟踪LOS控制算法仿真附Matlab代码
  • Java面试早就不问八股文了!都是面试场景题,没做过根本回答不上来!
  • SQL性能优化秘籍:速度与简洁兼得
  • 汉中装修风格怎么选?汉府人家装饰本地业主实测好看风格盘点 - 一个呆呆
  • 大数据毕设项目推荐-基于Python+Echart的学生心理健康数据可视化系统设计与实现【附源码+文档,调试定制服务】