Xamarin.Forms 基础——Behavior+EffectBehavior

来源:互联网 发布:Android悬浮窗源码 编辑:程序博客网 时间:2024/06/07 20:46

可重用的效果行为

使用行为添加效果到控件

PDF用于离线使用
  • 下载PDF
示例代码:
  • 效果行为
相关文章:
  • 效果
相关API:
  • 行为
  • 行为<T>

让我们知道你对此的感受

最后更新:2016年4月

行为是向控件添加效果的有用方法,从代码隐藏文件中删除锅炉版效果处理代码。本文演示如何使用Xamarin.Forms行为向控件添加效果。

概观

EffectBehavior类是增加了一个可重复使用的Xamarin.Forms自定义行为Effect时的行为被附接到控制实例的控制,并删除Effect当所述行为从控制拆下实例。

为了使用该行为,必须设置以下行为属性:

  •  - ResolutionGroupName效果类的属性值。
  • 名称 - ExportEffect效果类的属性值。

有关效果的更多信息,请参阅效果。

创建行为

EffectBehavior类从派生Behavior<T>类,这里T是一个View。这意味着EffectBehavior该类可以附加到任何Xamarin.Forms控件。

实施可绑定属性

为了Effect在行为附加到控件时添加到控件,EffectBehavior该类定义了两个BindableProperty实例,如下面的代码示例所示:

public class EffectBehavior : Behavior<View>{  public static readonly BindableProperty GroupProperty =    BindableProperty.Create ("Group", typeof(string), typeof(EffectBehavior), null);  public static readonly BindableProperty NameProperty =    BindableProperty.Create ("Name", typeof(string), typeof(EffectBehavior), null);  public string Group {    get { return (string)GetValue (GroupProperty); }    set { SetValue (GroupProperty, value); }  }  public string Name {    get { return(string)GetValue (NameProperty); }    set { SetValue (NameProperty, value); }  }  ...}

EffectBehavior消费时,该Group属性应该设置ResolutionGroupName为该效果的属性的值。此外,Name属性应该设置ExportEffect为效果类的属性的值。

实现覆盖

EffectBehavior类重写OnAttachedToOnDetachingFrom所述的方法Behavior<T>类,如在下面的代码例如:

public class EffectBehavior : Behavior<View>{  ...  protected override void OnAttachedTo (BindableObject bindable)  {    base.OnAttachedTo (bindable);    AddEffect (bindable as View);  }  protected override void OnDetachingFrom (BindableObject bindable)  {    RemoveEffect (bindable as View);    base.OnDetachingFrom (bindable);  }  ...}

OnAttachedTo方法通过调用该方法执行设置AddEffect,将附加的控件作为参数传递。该OnDetachingFrom方法通过调用该方法执行清理RemoveEffect,将附加的控件作为参数传入。

实施行为功能

行为的目的是添加Effect在定义GroupName属性来控制时的行为被附接到控制,并删除Effect当所述行为从控制分离。核心行为功能如下代码示例所示:

public class EffectBehavior : Behavior<View>{  ...  void AddEffect (View view)  {    var effect = GetEffect ();    if (effect != null) {      view.Effects.Add (GetEffect ());    }  }  void RemoveEffect (View view)  {    var effect = GetEffect ();    if (effect != null) {      view.Effects.Remove (GetEffect ());    }  }  Effect GetEffect ()  {    if (!string.IsNullOrWhiteSpace (Group) && !string.IsNullOrWhiteSpace (Name)) {      return Effect.Resolve (string.Format ("{0}.{1}", Group, Name));    }    return null;  }}

AddEffect方法响应于EffectBehavior附加到控件而被执行,并且其接收附加的控制作为参数。然后,该方法将检索到的效果添加到控件的Effects集合。RemoveEffect响应于EffectBehavior从控件分离而执行该方法,并且接收附加控制作为参数。该方法然后从控件的Effects集合中删除效果。

GetEffect方法使用该Effect.Resolve方法来检索Effect。效果位于通过的串联GroupName属性值。如果一个平台没有提供效果,该Effect.Resolve方法将返回一个非null值。

消费行为

EffectBehavior类可以被附连到Behaviors一个控制集合,如下面的XAML代码示例表明:

<Label Text="Label Shadow Effect" ...>  <Label.Behaviors>    <local:EffectBehavior Group="Xamarin" Name="LabelShadowEffect" />  </Label.Behaviors></Label>

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

var label = new Label {  Text = "Label Shadow Effect",  ...};label.Behaviors.Add (new EffectBehavior {  Group = "Xamarin",  Name = "LabelShadowEffect"});

GroupName行为的属性设置为的值ResolutionGroupName,并ExportEffect在每个特定平台的项目效果类属性。

在运行时,当行为附加到Label控件时,Xamarin.LabelShadowEffect将被添加到控件的Effects集合中。这会导致阴影被添加到Label控件显示的文本中,如以下屏幕截图所示:

使用此行为从控件添加和删除效果的优点是可以从代码隐藏文件中删除锅炉版效果处理代码。

概要

本文演示了使用一个行为来添加一个控件的效果。的EffectBehavior类是增加了一个可重复使用的Xamarin.Forms自定义行为Effect时的行为被附接到控制实例的控制,并删除Effect当所述行为从控制拆下实例。