diff options
Diffstat (limited to 'Xamarin.Forms.Core/Effect.cs')
-rw-r--r-- | Xamarin.Forms.Core/Effect.cs | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core/Effect.cs b/Xamarin.Forms.Core/Effect.cs new file mode 100644 index 00000000..9e269118 --- /dev/null +++ b/Xamarin.Forms.Core/Effect.cs @@ -0,0 +1,70 @@ +using System; +using System.ComponentModel; + +namespace Xamarin.Forms +{ + public abstract class Effect + { + internal Effect() + { + } + + public Element Element { get; internal set; } + + public bool IsAttached { get; private set; } + + public string ResolveId { get; internal set; } + + #region Statics + + public static Effect Resolve(string name) + { + Type effectType; + Effect result = null; + if (Registrar.Effects.TryGetValue(name, out effectType)) + { + result = (Effect)Activator.CreateInstance(effectType); + } + + if (result == null) + result = new NullEffect(); + result.ResolveId = name; + return result; + } + + #endregion + + // Received after Control/Container/Element made valid + protected abstract void OnAttached(); + + // Received after Control/Container made invalid + protected abstract void OnDetached(); + + internal virtual void ClearEffect() + { + if (IsAttached) + SendDetached(); + Element = null; + } + + internal virtual void SendAttached() + { + if (IsAttached) + return; + OnAttached(); + IsAttached = true; + } + + internal virtual void SendDetached() + { + if (!IsAttached) + return; + OnDetached(); + IsAttached = false; + } + + internal virtual void SendOnElementPropertyChanged(PropertyChangedEventArgs args) + { + } + } +}
\ No newline at end of file |