news 2026/4/25 18:29:42

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/4/23 11:21:48

分布式锁的特性是什么?如何实现分布式锁?

一、特性互斥性&#xff1a;在任何时刻&#xff0c;只有一个节点可以持有锁&#xff0c;确保资源的独占访问。不会发生死锁&#xff1a;如果一个节点崩溃&#xff0c;锁可以被其他节点获取&#xff0c;避免死锁。公平性&#xff1a;如果多个节点同时申请锁&#xff0c;系统应该…

作者头像 李华
网站建设 2026/4/23 15:51:14

Java面试早就不问八股文了!都是面试场景题,没做过根本回答不上来!

现在 Java 面试确实早已从死记硬背的 “八股文” 转向了场景化、实战化的问题考察&#xff0c;核心是检验你解决实际业务问题的能力&#xff0c;而不是单纯的知识点记忆。没真正做过相关项目的话&#xff0c;这类问题确实很难答到点子上。下面我整理了几个高频的 Java 面试场景…

作者头像 李华
网站建设 2026/4/23 11:29:09

为什么氛围编程有意义

“如果你广泛了解路&#xff0c;你会在一切中看到它。” — 宫本武藏 [1] 为什么我对氛围编程有如此强烈的信念&#xff1f;为什么我花这么多时间来做它并传达它&#xff1f; 我不是 AI 专家。上次我研究它是在大学&#xff0c;我几乎不知道"随机森林"是什么。 我…

作者头像 李华
网站建设 2026/4/23 14:27:31

DeepSeek-OCR 2实战:让AI像人一样“看懂”复杂文档

文章目录一、先唠唠为啥选DeepSeek-OCR 2&#xff1f;比传统OCR强在哪&#xff1f;二、实战准备&#xff1a;3分钟搞定环境搭建三、核心实战&#xff1a;处理3类复杂文档&#xff0c;代码直接抄场景1&#xff1a;识别带表格的合同&#xff0c;自动转Excel场景2&#xff1a;识别…

作者头像 李华
网站建设 2026/4/23 13:00:35

PCIe-Completion Timeout Mechanism

“完成超时机制(Completion Timeout Mechanism)”定义了在芯片层面实现事务层可靠性兜底的核心硬件安全机制。它不是一个性能优化特性,而是一个必须由硬件定时器、请求跟踪表和错误报告逻辑实现的“最后防线”,用于从系统性的挂起或死锁中恢复。 完成超时机制的本质是:当…

作者头像 李华