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 System.Windows.Controls.Primitives; using System.Collections.Generic; namespace SLTrigger { public class Trigger { public static readonly DependencyProperty Trigger_ClickProperty = DependencyProperty.RegisterAttached( "Click", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_MouseOverProperty = DependencyProperty.RegisterAttached( "MouseOver", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_MouseLeaveProperty = DependencyProperty.RegisterAttached( "MouseLeave", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_LostFocusProperty = DependencyProperty.RegisterAttached( "LostFocus", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_GotFocusProperty = DependencyProperty.RegisterAttached( "GotFocus", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_SelectionChangedProperty = DependencyProperty.RegisterAttached( "SelectionChanged", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_TargetProperty = DependencyProperty.RegisterAttached( "Target", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_ZIndexProperty = DependencyProperty.RegisterAttached( "ZIndex", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); public static readonly DependencyProperty Trigger_SelectedProperty = DependencyProperty.RegisterAttached( "Selected", typeof(string), typeof(Trigger), new PropertyMetadata( new PropertyChangedCallback(OnClickPropertyChanged))); private static Dictionary<object, List<object>> tempZIndex = new Dictionary<object, List<object>>(); private static void OnClickPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } private static UserControl GetUserControl(FrameworkElement start) { if (start.Parent is UserControl) return start.Parent as UserControl; return GetUserControl((FrameworkElement)start.Parent); } public static void SetClick(UIElement element, string value) { if (element is ButtonBase) { ButtonBase bb = (ButtonBase)element; bb.Click -= new RoutedEventHandler(ButtonClickEvent); bb.SetValue(Trigger_ClickProperty, value); if (value != string.Empty && value != null) bb.Click += new RoutedEventHandler(ButtonClickEvent); return; } element.MouseLeftButtonUp -= new MouseButtonEventHandler(ClickEvent); element.SetValue(Trigger_ClickProperty, value); if (value != string.Empty && value != null) element.MouseLeftButtonUp += new MouseButtonEventHandler(ClickEvent); } public static string GetClick(UIElement element) { object value = element.GetValue(Trigger_ClickProperty); if (value == null) return string.Empty; return (string)value; } public static void SetMouseOver(UIElement element, string value) { element.MouseEnter -= new MouseEventHandler(MouseOverEvent); element.SetValue(Trigger_MouseOverProperty, value); if (value != string.Empty && value != null) element.MouseEnter += new MouseEventHandler(MouseOverEvent); } public static string GetMouseOver(UIElement element) { object value = element.GetValue(Trigger_MouseOverProperty); if (value == null) return string.Empty; return (string)value; } public static void SetMouseLeave(UIElement element, string value) { element.MouseEnter -= new MouseEventHandler(MouseLeaveEvent); element.SetValue(Trigger_MouseLeaveProperty, value); if (value != string.Empty && value != null) element.MouseEnter += new MouseEventHandler(MouseLeaveEvent); } public static string GetMouseLeave(UIElement element) { object value = element.GetValue(Trigger_MouseLeaveProperty); if (value == null) return string.Empty; return (string)value; } public static void SetGotFocus(UIElement element, string value) { element.GotFocus -= new RoutedEventHandler(GotFocusEvent); element.SetValue(Trigger_GotFocusProperty, value); if (value != string.Empty && value != null) element.GotFocus += new RoutedEventHandler(GotFocusEvent); } public static string GetGotFocus(UIElement element) { object value = element.GetValue(Trigger_GotFocusProperty); if (value == null) return string.Empty; return (string)value; } public static void SetLostFocus(UIElement element, string value) { element.LostFocus -= new RoutedEventHandler(LostFocusEvent); element.SetValue(Trigger_LostFocusProperty, value); if (value != string.Empty && value != null) element.LostFocus += new RoutedEventHandler(LostFocusEvent); } public static string GetLostFocus(UIElement element) { object value = element.GetValue(Trigger_LostFocusProperty); if (value == null) return string.Empty; return (string)value; } public static void SetZIndex(UIElement element, string value) { element.SetValue(Trigger_ZIndexProperty, value); } public static string GetZIndex(UIElement element) { object value = element.GetValue(Trigger_ZIndexProperty); if (value == null) return string.Empty; return (string)value; } public static void SetSelected(UIElement element, string value) { element.SetValue(Trigger_SelectedProperty, value); } public static string GetSelected(UIElement element) { object value = element.GetValue(Trigger_SelectedProperty); if (value == null) return string.Empty; return (string)value; } public static void SetTarget(UIElement element, string value) { element.SetValue(Trigger_TargetProperty, value); } public static string GetTarget(UIElement element) { object value = element.GetValue(Trigger_TargetProperty); if (value == null) return string.Empty; return (string)value; } public static void SetSelectionChanged(UIElement element, string value) { if(element is Selector) { Selector sel = (Selector)element; sel.SelectionChanged -= new SelectionChangedEventHandler(SelectionChangedEvent); element.SetValue(Trigger_SelectionChangedProperty, value); if (value != string.Empty && value != null) sel.SelectionChanged += new SelectionChangedEventHandler(SelectionChangedEvent); } else if (element is TabControl) { TabControl sel = (TabControl)element; sel.SelectionChanged -= new SelectionChangedEventHandler(SelectionChangedEvent); element.SetValue(Trigger_SelectionChangedProperty, value); if (value != string.Empty && value != null) sel.SelectionChanged += new SelectionChangedEventHandler(SelectionChangedEvent); } } public static string GetSelectionChanged(UIElement element) { object value = element.GetValue(Trigger_SelectionChangedProperty); if (value == null) return string.Empty; return (string)value; } public static void ButtonClickEvent(object sender, EventArgs e) { ClickEvent(sender, null); } public static void ClickEvent(object sender, MouseButtonEventArgs e) { string ani = GetClick(sender as UIElement); if (ani != string.Empty) { UserControl uc = GetUserControl(sender as FrameworkElement); Storyboard sb = uc.FindName(ani) as Storyboard; Begin_Storyboard((UIElement)sender, sb); } } public static void MouseOverEvent(Object sender, MouseEventArgs e) { string ani = GetMouseOver(sender as UIElement); if (ani != string.Empty) { UserControl uc = GetUserControl(sender as FrameworkElement); Storyboard sb = uc.FindName(ani) as Storyboard; Begin_Storyboard((UIElement)sender, sb); } } public static void MouseLeaveEvent(Object sender, MouseEventArgs e) { string ani = GetMouseLeave(sender as UIElement); if (ani != string.Empty) { UserControl uc = GetUserControl(sender as FrameworkElement); Storyboard sb = uc.FindName(ani) as Storyboard; Begin_Storyboard((UIElement)sender, sb); } } public static void GotFocusEvent(Object sender, RoutedEventArgs e) { string ani = GetGotFocus(sender as UIElement); if (ani != string.Empty) { UserControl uc = GetUserControl(sender as FrameworkElement); Storyboard sb = uc.FindName(ani) as Storyboard; Begin_Storyboard((UIElement)sender, sb); } } public static void LostFocusEvent(Object sender, RoutedEventArgs e) { string ani = GetLostFocus(sender as UIElement); if (ani != string.Empty) { UserControl uc = GetUserControl(sender as FrameworkElement); Storyboard sb = uc.FindName(ani) as Storyboard; Begin_Storyboard((UIElement)sender, sb); } } private static void Begin_Storyboard(UIElement elem, Storyboard sb) { UserControl uc = GetUserControl(elem as FrameworkElement); if (sb != null) { sb.Stop(); string aniTarget = GetTarget((UIElement)elem); if (aniTarget != string.Empty) { if (aniTarget == "page") { UIElement aniTargetObj = uc; Storyboard.SetTarget(sb, aniTargetObj); string zIndex = GetZIndex(elem); if (zIndex != string.Empty) { int oldZIndex = Canvas.GetZIndex(aniTargetObj); if (!tempZIndex.ContainsKey(elem)) tempZIndex.Add(sb, new List<object>() { aniTargetObj, oldZIndex }); Canvas.SetZIndex(aniTargetObj, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } else { UIElement aniTargetObj = uc.FindName(aniTarget) as UIElement; Storyboard.SetTarget(sb, aniTargetObj); string zIndex = GetZIndex(elem); if (zIndex != string.Empty) { int oldZIndex = Canvas.GetZIndex(aniTargetObj); if (!tempZIndex.ContainsKey(elem)) tempZIndex.Add(sb, new List<object>() { aniTargetObj, oldZIndex }); Canvas.SetZIndex(aniTargetObj, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } } sb.Begin(); } } static void sb_Completed(object sender, EventArgs e) { if(tempZIndex.ContainsKey(sender)) { List<object> state = tempZIndex[sender]; Canvas.SetZIndex((UIElement)state[0], (int)state[1]); tempZIndex.Remove(sender); } } public static void SelectionChangedEvent(Object sender, SelectionChangedEventArgs e) { string ani = GetSelectionChanged(sender as UIElement); UserControl uc = GetUserControl(sender as FrameworkElement); if (ani != string.Empty) { if (ani.ToLower() == "item") { object currentItem = null; if (sender is Selector && ((Selector)sender).SelectedItem != null) currentItem = ((Selector)sender).SelectedItem; else if (sender is TabControl && ((TabControl)sender).SelectedItem != null) currentItem = ((TabControl)sender).SelectedItem; string selAni = GetSelected(currentItem as UIElement); if (selAni != string.Empty) { Storyboard sb = uc.FindName(selAni) as Storyboard; string selTarget = GetTarget(currentItem as UIElement); sb.Stop(); if (selTarget != string.Empty) { UIElement aniTargetObj = uc.FindName(selTarget) as UIElement; Storyboard.SetTarget(sb, aniTargetObj); string zIndex = GetZIndex(aniTargetObj); if (zIndex != string.Empty) { int oldZIndex = Canvas.GetZIndex(aniTargetObj); if (!tempZIndex.ContainsKey(aniTargetObj)) tempZIndex.Add(sb, new List<object>() { aniTargetObj, oldZIndex }); Canvas.SetZIndex(aniTargetObj, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } else { Storyboard.SetTarget(sb, currentItem as UIElement); string zIndex = GetZIndex(currentItem as UIElement); if (zIndex != string.Empty) { int oldZIndex = Canvas.GetZIndex(currentItem as UIElement); if (!tempZIndex.ContainsKey(currentItem as UIElement)) tempZIndex.Add(sb, new List<object>() { currentItem as UIElement, oldZIndex }); Canvas.SetZIndex(currentItem as UIElement, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } sb.Begin(); } } else { Storyboard sb = uc.FindName(ani) as Storyboard; if (sb != null) { sb.Stop(); string aniTarget = GetTarget((UIElement)sender); if (aniTarget != string.Empty) { UIElement aniTargetObj = uc.FindName(aniTarget) as UIElement; Storyboard.SetTarget(sb, aniTargetObj); string zIndex = GetZIndex(sender as UIElement); if (zIndex != string.Empty) { int oldZIndex = Canvas.GetZIndex(sender as UIElement); if (!tempZIndex.ContainsKey(sender)) tempZIndex.Add(sb, new List<object>() { aniTargetObj, oldZIndex }); Canvas.SetZIndex(aniTargetObj, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } else { if (sender is Selector && ((Selector)sender).SelectedItem != null) { Storyboard.SetTarget(sb, ((Selector)sender).SelectedItem as DependencyObject); string zIndex = GetZIndex(sender as UIElement); if (zIndex != string.Empty) { int oldZIndex = Canvas.GetZIndex(((Selector)sender).SelectedItem as UIElement); if (!tempZIndex.ContainsKey(sender)) tempZIndex.Add(sb, new List<object>() { ((Selector)sender).SelectedItem, oldZIndex }); Canvas.SetZIndex( ((Selector)sender).SelectedItem as UIElement, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } else if (sender is TabControl && ((TabControl)sender).SelectedItem != null) { Storyboard.SetTarget(sb, ((TabControl)sender).SelectedItem as DependencyObject); string zIndex = GetZIndex(sender as UIElement); int oldZIndex = Canvas.GetZIndex(((Selector)sender).SelectedItem as UIElement); if (!tempZIndex.ContainsKey(sender)) tempZIndex.Add(sb, new List<object>() { ((TabControl)sender).SelectedItem, oldZIndex }); Canvas.SetZIndex( ((Selector)sender).SelectedItem as UIElement, int.Parse(zIndex)); sb.Completed -= new EventHandler(sb_Completed); sb.Completed += new EventHandler(sb_Completed); } } sb.Begin(); } } } } } } |