WPF中行為(Behavior)的簡單使用
在我之前的 WPF 開發中,需要實作一些頁面效果時,常使用到的方式就是重寫元素的樣式(Style),然后再樣式里面設定使用元素的各類觸發器(Trigger)來實作效果,這樣常常需要撰寫大量的代碼,
近日學習到 WPF 中有一個叫做 Behavior 的擴展方式,可以用來實作頁面效果,實作方式更為簡便,學習筆記如下:
添加需要的DLL庫
要使用 Behavior 的相關功能需要先添加 “System.Windows.Interactivity” 庫,可以通過 Nuget 進行安裝,
如下圖:

安裝完成后如下圖:

撰寫自己需要的 EffectBehavior 類
如下代碼中,定義的 Behavior 類的為 EffectBehavior,EffectBehavior 需要繼承自 Behavior<T>,
按 F12 進入 Behavior 的原始碼中可知,T (下面代碼中為 FrameworkElement)為該行為需要產生作用的元素的型別,通過 AssociatedObject 進行關聯,

代碼如下:實作了滑鼠懸停的時候,元素進行紅色邊框高亮顯示,
using System.Windows;
using System.Windows.Interactivity;
using System.Windows.Media;
using System.Windows.Media.Effects;
namespace BehaviorDemo
{
// Behavior<T> T設定行為產生作用的元素型別
public class EffectBehavior : Behavior<FrameworkElement>
{
//使用 Behavior 必須重寫以下兩個虛方法
protected override void OnAttached()
{
base.OnAttached();
//AssociatedObject為關聯物件, 是Behavior<T>中的T
AssociatedObject.MouseMove += AssociatedObject_MouseMove;
AssociatedObject.MouseLeave += AssociatedObject_MouseLeave;
}
private void AssociatedObject_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
var element = sender as FrameworkElement;
element.Effect = (Effect)new DropShadowEffect() { Color = Colors.Transparent, ShadowDepth = 0 };
}
private void AssociatedObject_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
var element = sender as FrameworkElement;
element.Effect = (Effect)new DropShadowEffect() { Color = Colors.Red, ShadowDepth = 0 };
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.MouseMove -= AssociatedObject_MouseMove;
AssociatedObject.MouseLeave -= AssociatedObject_MouseLeave;
}
}
}
界面中參考 EffectBehavior
要在 XAML 代碼中使用 Behavior,需要引入命名空間
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
具體代碼如下:
<Window
x:
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:BehaviorDemo"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Grid>
<StackPanel>
<TextBox
Width="100"
Height="30"
Margin="40">
<i:Interaction.Behaviors>
<local:EffectBehavior />
</i:Interaction.Behaviors>
</TextBox>
<Button
Width="100"
Height="30"
Margin="40">
<i:Interaction.Behaviors>
<local:EffectBehavior />
</i:Interaction.Behaviors>
</Button>
</StackPanel>
</Grid>
</Window>
實作效果如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/255428.html
標籤:WPF
上一篇:【WPF學習筆記】WPF中影片(Animation)的簡單使用
下一篇:C#儀器控制
