可重用的效果行为
使用行为添加效果到控件
行为是向控件添加效果的有用方法,从代码隐藏文件中删除锅炉版效果处理代码。本文演示如何使用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
类重写OnAttachedTo
和OnDetachingFrom
所述的方法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
在定义Group
和Name
属性来控制时的行为被附接到控制,并删除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
。效果位于通过的串联Group
和Name
属性值。如果一个平台没有提供效果,该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"
});
该Group
和Name
行为的属性设置为的值ResolutionGroupName
,并ExportEffect
在每个特定平台的项目效果类属性。
在运行时,当行为附加到Label
控件时,Xamarin.LabelShadowEffect
将被添加到控件的Effects
集合中。这会导致阴影被添加到Label
控件显示的文本中,如以下屏幕截图所示:
使用此行为从控件添加和删除效果的优点是可以从代码隐藏文件中删除锅炉版效果处理代码。
概要
本文演示了使用一个行为来添加一个控件的效果。的EffectBehavior
类是增加了一个可重复使用的Xamarin.Forms自定义行为Effect
时的行为被附接到控制实例的控制,并删除Effect
当所述行为从控制拆下实例。