Behavior

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Behavior相关的知识,希望对你有一定的参考价值。

原文:Behavior

Behavior翻译是行为

在WPF中Behavior的使用时必须引用Blend的程序集。

?C:Program Files (x86)Microsoft SDKsExpressionBlend.NETFrameworkv4.5LibrariesSystem.Windows.Interactivity.dll

 System.Windows.Interactivity;

 

或者通过Nuget包管理来获取。

技术图片

 

现在来说说如果使用

behavior是行为,而这个行为是针对控件的。

就目前WPF添加行为的方式可以有附加属性 附加事件 依赖属性等方法。

就特性而言behavior和附加属性很相似。

那么使用方式:

  1. 创建一个由Behavior<DependencyObject>所派生的类

  2. 创建依赖属性(不用回调方法)

  3. 根据你想要的效果来重写Behavior的方法

  4. 在xaml中使用

技术图片
  public class ATCH : Behavior<System.Windows.Controls.TextBox>
    {
        public static readonly DependencyProperty BackRedProperty = DependencyProperty.Register("BackRed", typeof(bool), typeof(ATCH), new PropertyMetadata(false, null));
          
        public bool BackRed
        {
            get { return (bool)GetValue(BackRedProperty); }
            set { SetValue(BackRedProperty,value); }
        }
      
        
        /// <summary>
        /// 当behavior附加成功时
        /// </summary>
        protected override void OnAttached()
        {
            base.OnAttached();
           
        }
        /// <summary>
        /// 当behavior分离时
        /// </summary>
        protected override void OnDetaching()
        {
            base.OnDetaching();
        }

        /// <summary>
        /// 当属性变化时
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            if ((bool)e.NewValue)
                AssociatedObject.Background = new SolidColorBrush(Colors.Red);
            else
                AssociatedObject.Background = new SolidColorBrush(Colors.Gainsboro);
        }
        /// <summary>
        /// 当属性变化
        /// 此方法触发在OnPropertyChanged后
        /// </summary>
        protected override void OnChanged()
        {
            base.OnChanged();
           
        }
    }
技术图片

而在xaml中则是

 

技术图片
<Window x:Class="Beh.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:Beh"
        
        xmlns:AT="http://schemas.microsoft.com/expression/2010/interactivity" 
      
        mc:Ignorable="d" 
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox    Margin="211,147,191,124">
            <AT:Interaction.Behaviors>
                <local:ATCH BackRed="False"  />
            </AT:Interaction.Behaviors>
        </TextBox>
    </Grid>
</Window>
技术图片

 

以上是关于Behavior的主要内容,如果未能解决你的问题,请参考以下文章

yii2 源码分析Behavior类分析

CAF(C++ actor framework)使用随笔(unbecome与keep_behavior用法)

Material Design系列,Behavior之BottomSheetBehavior与BottomSheetDialog

Material之Behavior实现支付宝密码弹窗 仿淘宝/天猫商品属性选择

Material之Behavior实现支付宝密码弹窗 仿淘宝/天猫商品属性选择

行为Behavior的使用