|
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Slex.Lib.Reactive;
namespace Slex.Lib.Interactions
{
/// <summary>
/// A trigger to fire when an event is raised
/// </summary>
public class EventTrigger : ObserverTrigger<System.Collections.Generic.Event<EventArgs>>
{
/// <summary>
/// The name of the event to hook to
/// </summary>
public string EventName
{
get { return (string)GetValue(EventNameProperty); }
set { SetValue(EventNameProperty, value); }
}
// Using a DependencyProperty as the backing store for EventName. This enables animation, styling, binding, etc...
public static readonly DependencyProperty EventNameProperty =
DependencyProperty.Register("EventName", typeof(string), typeof(EventTrigger), new PropertyMetadata(string.Empty));
/// <summary>
/// Initializes the observable
/// </summary>
protected override void Initialize()
{
this.Cleanup();
if (Source == null)
throw new InvalidOperationException("Source specified for this trigger is null");
if (string.IsNullOrEmpty(EventName))
throw new InvalidOperationException("EventName specified for this trigger is null");
this.Observable = ObservableExtensions.FromEvent(Source, EventName);
}
/// <summary>
/// On next action for this observer trigger
/// </summary>
/// <param name="param"></param>
protected override void OnNext(object param)
{
var item=param as System.Collections.Generic.Event<EventArgs>;
InvokeConditional(new EventResult()
{ Sender = item.Sender, Args = item.EventArgs });
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Architect, Developer, Speaker | Wannabe GUT inventor & Data Scientist | Microsoft MVP in C#