首页 > Windows开发 > 详细

WPF 附加行为

时间:2021-05-02 16:49:24      阅读:24      评论:0      收藏:0      [点我收藏+]

如何给一个控件 添加一个它不具有的行为 

比如TextBlock 给它添加一个双击事件 改变它的背景颜色 如图

技术分享图片

 

引用Nuget包 搜索 Interactivity 安装

流程如下

新建一个类 继承Behavior<T>

重写两个方法 

protected override void OnAttached();

protected override void OnDetaching();

在XAML里面引用命名空间 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

使用

完整代码如下

后台

 1 class DoubleClickChangeBackgroundBehavior : Behavior<TextBlock>
 2     {
 3 
 4         #region Field 字段
 5         Brush color;
 6         #endregion
 7 
 8         #region Constructor 构造函数
 9 
10 
11 
12         #endregion
13 
14         #region Property 属性
15 
16 
17 
18         #endregion
19 
20         #region Event 事件
21 
22 
23 
24         #endregion
25 
26         #region Method 方法
27         //重写附加方法 
28         protected override void OnAttached()
29         {
30             //记录原始的颜色
31             color = AssociatedObject.Background.Clone();
32             //点击事件
33             AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;
34             //离开事件
35             AssociatedObject.MouseLeave += AssociatedObject_MouseLeave;
36         }
37         //重写分离方法
38         protected override void OnDetaching()
39         {
40             AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown;
41             AssociatedObject.MouseLeave -= AssociatedObject_MouseLeave;
42         }
43 
44         private void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)
45         {
46             //还原为原始颜色
47             (sender as TextBlock).Background = color;
48 
49         }
50 
51         private void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
52         {
53             var element = sender as TextBlock;
54             //WPF好像没有鼠标双击事件,用此办法代替
55             if (e.ClickCount == 2)
56             {
57                 element.Background = Brushes.Green;
58             }
59         }
60 
61 
62         #endregion
63 
64 
65     }

界面

 1 <Window x:Class="附加行为.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5         xmlns:local="clr-namespace:附加行为"
 6         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 7         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
 8         Title="MainWindow"
 9         Width="800"
10         Height="450"
11         mc:Ignorable="d">
12     <Grid>
13         <TextBlock Width="200"
14                    Height="45"
15                    Background="Yellow"
16                    FontSize="30"
17                    Text="双击改变颜色" >
18             <i:Interaction.Behaviors>
19                 <local:DoubleClickChangeBackgroundBehavior/>
20             </i:Interaction.Behaviors>
21         </TextBlock>
22     </Grid>
23 </Window>

 

WPF 附加行为

原文:https://www.cnblogs.com/AtTheMoment/p/14725788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!