protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            base.OnPropertyChanged(e);

            if (e.Property == ValueProperty)
            {
                var type = e.NewValue.GetType();

                if (currentEnumType != type)
                {
                    currentEnumType = type;
                    uxPanel.Children.Clear();
                    foreach (var v in Enum.GetValues(type))
                    {
                        var b = new EnumButton();
                        b.Value   = v;
                        b.Content = Enum.GetName(type, v);
                        b.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(button_PreviewMouseLeftButtonDown);
                        uxPanel.Children.Add(b);
                    }
                }

                foreach (EnumButton c in uxPanel.Children)
                {
                    if (c.Value.Equals(Value))
                    {
                        c.IsChecked = true;
                    }
                    else
                    {
                        c.IsChecked = false;
                    }
                }
            }
        }
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            base.OnPropertyChanged(e);

            if (e.Property == ValueProperty) {
                var type = e.NewValue.GetType();

                if (currentEnumType != type) {
                    currentEnumType = type;
                    uxPanel.Children.Clear();
                    foreach (var v in Enum.GetValues(type)) {
                        var b = new EnumButton();
                        b.Value = v;
                        b.Content = Enum.GetName(type, v);
                        b.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(button_PreviewMouseLeftButtonDown);
                        uxPanel.Children.Add(b);
                    }
                }

                foreach (EnumButton c in uxPanel.Children) {
                    if (c.Value.Equals(Value)) {
                        c.IsChecked = true;
                    }
                    else {
                        c.IsChecked = false;
                    }
                }
            }
        }