Xamrin.Forms 基础——Behaviors——Attached Behaviors

附加行为

将功能添加到控件中,无需进行子类化

PDF用于离线使用
示例代码:

让我们知道你对此的感受

最后更新:2016年4月

附加行为是具有一个或多个附加属性的静态类。本文演示如何创建和使用附加的行为。

概观

附加属性是一种特殊类型的可绑定属性。它们在一个类中定义,但是附加到其他对象,并且它们在XAML中可识别为包含以期间分隔的类和属性名称的属性。

附加属性可以定义propertyChanged当属性的值更改时将执行的委托,例如在控件上设置属性时。当propertyChanged委托执行时,它将传递一个对它所附加的控件的引用,以及包含属性的旧值和新值的参数。该委托可用于通过操作传入的引用将新功能添加到属性附加到的控件,如下所示:

  1. propertyChanged委托注塑控制引用,它被接收为一个BindableObject,以该行为被设计成增强的控件类型。
  2. propertyChanged代表修改控件的属性,调用控件的方法,或者注册了由控制曝光事件的事件处理程序,以实现核心行为的功能。

附加行为的一个问题是它们在static类中定义,具有static属性和方法。这使得很难创建具有状态的附加行为。此外,Xamarin.Forms行为已经取代附加行为作为行为建构的首选方法。有关Xamarin.Forms行为的更多信息,请参阅Xamarin.Forms行为可重用行为

创建附加行为

示例应用程序演示了一个NumericValidationBehavior,它突出显示用户输入Entry红色控件的值(如果不是)double。行为如下代码示例所示:

public static class NumericValidationBehavior
{
    public static readonly BindableProperty AttachBehaviorProperty =
        BindableProperty.CreateAttached (
            "AttachBehavior",
            typeof(bool),
            typeof(NumericValidationBehavior),
            false,
            propertyChanged:OnAttachBehaviorChanged);

    public static bool GetAttachBehavior (BindableObject view)
    {
        return (bool)view.GetValue (AttachBehaviorProperty);
    }

    public static void SetAttachBehavior (BindableObject view, bool value)
    {
        view.SetValue (AttachBehaviorProperty, value);
    }

    static void OnAttachBehaviorChanged (BindableObject view, object oldValue, object newValue)
    {
        var entry = view as Entry;
        if (entry == null) {
            return;
        }

        bool attachBehavior = (bool)newValue;
        if (attachBehavior) {
            entry.TextChanged += OnEntryTextChanged;
        } else {
            entry.TextChanged -= OnEntryTextChanged;
        }
    }

    static void OnEntryTextChanged (object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse (args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Color.Default : Color.Red;
    }
}

NumericValidationBehavior类包含一个名为附加属性AttachBehaviorstatic获取和设置,其控制增加或移除的行为的给其将要连接的控制。此附加属性注册OnAttachBehaviorChanged将在属性的值更改时执行的方法。该方法TextChanged基于AttachBehavior附加属性的值注册或取消注册事件的事件处理程序。行为的核心功能是通过OnEntryTextChanged方法提供的,该方法解析Entry用户输入的值,TextColor如果值不是,则将属性设置为红色double

消费附加行为

NumericValidationBehavior类可以通过添加被消耗AttachBehavior附加属性到一个Entry控制,如在下面的XAML代码示例表明:

<ContentPage ... xmlns:local="clr-namespace:WorkingWithBehaviors;assembly=WorkingWithBehaviors" ...>
    ...
    <Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="true" />
    ...
</ContentPage>

EntryC#中的等效项显示在以下代码示例中:

var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, true);

在运行时,根据行为实现,行为将响应与控件的交互。以下屏幕截图演示了响应无效输入的附加行为:

为特定控件类型(或可应用于许多控件的超类)编写附加行为,并且只应将其添加到兼容控件中。尝试将行为附加到不兼容的控件将导致未知的行为,并取决于行为实现。

从控件中删除附加行为

NumericValidationBehavior类可以从一个控制通过设置去除AttachBehavior附着属性false,如下面的XAML代码示例表明:

<Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="false" />

EntryC#中的等效项显示在以下代码示例中:

var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, false);

在运行时,OnAttachBehaviorChangedAttachBehavior附加属性的值设置为该方法时,将执行该方法falseOnAttachBehaviorChanged然后,该方法将取消注册事件的事件处理程序TextChanged,确保在用户与控件交互时不会执行该行为。

概要

本文演示了如何创建和使用附加的行为。附加行为是static具有一个或多个附加属性的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值