如何给一个控件 添加一个它不具有的行为
比如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>
原文:https://www.cnblogs.com/AtTheMoment/p/14725788.html