using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Tango.Touch.Controls; namespace Tango.PPC.Maintenance.Controls { public class ButtonState : DependencyObject { public Object Value { get { return (Object)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } } public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(Object), typeof(ButtonState), new PropertyMetadata(null)); public Object Content { get { return (Object)GetValue(ContentProperty); } set { SetValue(ContentProperty, value); } } public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(Object), typeof(ButtonState), new PropertyMetadata(null)); } [ContentProperty(nameof(States))] public class StateTouchButton : TouchButton { public ObservableCollection States { get { return (ObservableCollection)GetValue(StatesProperty); } set { SetValue(StatesProperty, value); } } public static readonly DependencyProperty StatesProperty = DependencyProperty.Register("States", typeof(ObservableCollection), typeof(StateTouchButton), new PropertyMetadata(null, (d, e) => (d as StateTouchButton).OnStatesChanged())); public Object SelectedState { get { return (Object)GetValue(SelectedStateProperty); } set { SetValue(SelectedStateProperty, value); } } public static readonly DependencyProperty SelectedStateProperty = DependencyProperty.Register("SelectedState", typeof(Object), typeof(StateTouchButton), new PropertyMetadata(null, (d, e) => (d as StateTouchButton).OnSelectedStateChanged())); public StateTouchButton() { States = new ObservableCollection(); } private void OnStatesChanged() { if (States != null) { States.CollectionChanged -= States_CollectionChanged; States.CollectionChanged += States_CollectionChanged; OnSelectedStateChanged(); } } private void OnSelectedStateChanged() { if (SelectedState == null) { Content = null; return; } if (States != null) { var converter = TypeDescriptor.GetConverter(SelectedState.GetType()); var matchingState = States.OfType().ToList().FirstOrDefault(x => x.Value != null && converter.ConvertFrom(x.Value).Equals(SelectedState)); if (matchingState != null) { Content = matchingState.Content; } else { Content = null; } } else { Content = null; } } private void States_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { OnSelectedStateChanged(); } } }