public static void ToolTipChangedCallback(object sender, DependencyPropertyChangedEventArgs args)
        {
            ImageNamedActionButton owner = (ImageNamedActionButton)sender;
            Button btn = owner.btn;

            btn.ToolTip = args.NewValue;
        }
        public static void StyleChangedCallback(object sender, DependencyPropertyChangedEventArgs args)
        {
            ImageNamedActionButton owner = (ImageNamedActionButton)sender;
            Button btn = owner.btn;

            btn.Style = (System.Windows.Style)args.NewValue;
        }
        public static void ImageChangedCallback(object sender, DependencyPropertyChangedEventArgs args)
        {
            ImageNamedActionButton owner = (ImageNamedActionButton)sender;

            owner._useImage = args.NewValue != null;
            if (owner._useImage)
            {
                Button btn = owner.btn;
                btn.Content = args.NewValue;
            }
        }
        private static void ButtonNamedActionPropertyCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            //System.Diagnostics.Debugger.Break();
            ImageNamedActionButton nab = (ImageNamedActionButton)d;
            Button btn = nab.btn;

            if (nab._ActionHandler != null)
            {
                btn.Click -= nab._ActionHandler;
            }
            Base.Interfaces.INamedAction na = (Base.Interfaces.INamedAction)e.NewValue;
            if (na == null)
            {
                btn.Visibility = Visibility.Collapsed;
                return;
            }
            else
            {
                if (na is ViewModel.Implementations.NamedAction)
                {
                    ViewModel.Implementations.NamedAction vna = na as ViewModel.Implementations.NamedAction;
                    if (!vna.IsVisible)
                    {
                        btn.Visibility = Visibility.Collapsed;
                    }
                }
                btn.Visibility = Visibility.Visible;
            }
            if (!nab._useImage)
            {
                Binding headerBinding = new Binding(nameof(Base.Interfaces.INamedAction.Name));
                headerBinding.Source = na;
                headerBinding.Mode   = BindingMode.OneWay;
                headerBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                BindingOperations.SetBinding(btn, Button.ContentProperty, headerBinding);
            }
            if (na is ViewModel.Interfaces.IDisplayToUI)
            {
                Binding enabledBinding = new Binding(nameof(ViewModel.Interfaces.IDisplayToUI.IsEnabled));
                enabledBinding.Source = na;
                enabledBinding.Mode   = BindingMode.OneWay;
                enabledBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                BindingOperations.SetBinding(btn, System.Windows.Controls.Button.IsEnabledProperty, enabledBinding);
                Binding visibilityBinding = new Binding(nameof(ViewModel.Interfaces.IDisplayToUI.IsVisible));
                visibilityBinding.Source              = na;
                visibilityBinding.Mode                = BindingMode.OneWay;
                visibilityBinding.Converter           = new System.Windows.Controls.BooleanToVisibilityConverter();
                visibilityBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                BindingOperations.SetBinding(btn, System.Windows.Controls.Button.VisibilityProperty, visibilityBinding);
            }
            nab._ActionHandler = (ob, ev) => na.Action(ob, ev);
            btn.Click         += nab._ActionHandler;
        }