WPF行为及其触发器使用

行为是一类事物的共同特征,在WPF中通过行为可以封装一些通用的界面功能,从而实现代码重用来提高开发效率。因此他是一个非常好用的工具。行为将事件和处理方法封装到一起,简化ui界面xaml代码的复杂性和复用性。

通常情况下不用自己写行为, 直接使用Behaviors包中的行为就行了。也可以自定义行为。

1.使用Nuget包:

Microsoft.Xaml.Behaviors.Wpf

System.Windows.Interactivity.WPF

2.引用命名空间

    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

3.下面只是介绍其应用例子,不做讲解

(1)行为(Behaviors)

  • Button按钮点击清除TextBox文本
    public class ClearTextBehavior : Behavior<Button>
    {
        public TextBox Target
        {
            get { return (TextBox)GetValue(TargetProperty); }
            set { SetValue(TargetProperty, value); }
        }
        public static readonly DependencyProperty TargetProperty =
            DependencyProperty.Register(nameof(Target), typeof(TextBox), typeof(ClearTextBehavior), new PropertyMetadata(null));
        protected override void OnAttached()
        {
            AssociatedObject.Click += OnClick;
        }
        protected override void OnDetaching()
        {
            AssociatedObject.Click -= OnClick;
        }
        private void OnClick(object sender, RoutedEventArgs e)
        {
            Target?.Clear();
        }
    }
  •  xaml使用
<Button HorizontalAlignment="Left" Content="Clear">
        <i:Interaction.Behaviors>
           <local:ClearTextBehavior Target="{Binding ElementName=textBox}" />
        </i:Interaction.Behaviors>
</Button>

(2)触发器(Trigggers)

行为触发器,通常是结合Action使用,InvokeCommandAction、CallMethodAction、ChangePropertyAction

  • InvokeCommandAction
//View层代码   
 <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding ChangeTextBoxAsync}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>

//VM层代码
public RelayCommand ChangeTextBoxAsync
 {
  get
     {
      return new RelayCommand(async () =>
                {
                });
     }
  }
  • CallMethodAction,关闭窗口
<Button Content="Close">
       <i:Interaction.Triggers>
          <i:EventTrigger EventName="Click">
                        <ei:CallMethodAction MethodName="Close" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
          </i:EventTrigger>
       </i:Interaction.Triggers>
</Button>
  • ChangePropertyAction,点击按钮背景色变红色
<Button Content="ChangeProperty">
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="Click">
         <ei:ChangePropertyAction
             PropertyName="Background"
             TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}"
             Value="red" />
         </i:EventTrigger>
   </i:Interaction.Triggers>
</Button>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值