Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/WPF/CS/RibbonDemo.Wpf/Controls/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/WPF/CS/RibbonDemo.Wpf/Controls/DemoModuleControl.cs

using System;
using System.Windows;
using DevExpress.Xpf.Bars;
using DevExpress.Xpf.Core.Native;
using DevExpress.Xpf.DemoBase;
using DevExpress.Xpf.Utils;
using DevExpress.Xpf.Ribbon;
using System.Windows.Media;
using DevExpress.Xpf.Core;


namespace RibbonDemo {
    public class RibbonDemoModule : DemoModule {
        public static readonly DependencyProperty BarManagerProperty;
        public static readonly DependencyProperty RibbonProperty;
        public static readonly DependencyProperty ForegroundInfoProperty;

        static RibbonDemoModule() {
            Type ownerType = typeof(RibbonDemoModule);
            BarManagerProperty = DependencyPropertyManager.Register("BarManager", typeof(BarManager), ownerType, new FrameworkPropertyMetadata(null));
            RibbonProperty = DependencyPropertyManager.Register("Ribbon", typeof(RibbonControl), ownerType, new FrameworkPropertyMetadata(null));
            ForegroundInfoProperty = DependencyPropertyManager.Register("ForegroundInfo", typeof(ForegroundInfo), ownerType, new FrameworkPropertyMetadata(null));
        }
        public BarManager Manager {
            get { return (BarManager)GetValue(BarManagerProperty); }
            set { SetValue(BarManagerProperty, value); }
        }
        public RibbonControl Ribbon {
            get { return (RibbonControl)GetValue(RibbonProperty); }
            set { SetValue(RibbonProperty, value); }
        }
        public ForegroundInfo ForegroundInfo {
            get { return (ForegroundInfo)GetValue(ForegroundInfoProperty); }
            set { SetValue(ForegroundInfoProperty, value); }
        }

        public RibbonDemoModule() {
            ForegroundInfo = new RibbonDemo.ForegroundInfo();
            Loaded += OnLoaded;
            Unloaded += OnUnloaded;
        }

        protected virtual bool NeedChangeEditorsTheme { get { return false; } }
        protected virtual void OnLoaded(object sender, RoutedEventArgs e) {
            Manager = (BarManager)DemoModuleControl.FindDemoContent(typeof(BarManager), this);
            Ribbon = (RibbonControl)DemoModuleControl.FindDemoContent(typeof(RibbonControl), this);
            ForegroundInfo.OnModuleLoaded();
            DemoModuleControl.DemoContent = Manager;
        }
        protected virtual void OnUnloaded(object sender, RoutedEventArgs e) {
            ForegroundInfo.OnModuleUnoaded();
        }
        protected override bool CanLeave() {
            return true;
        }
        protected override void RaiseIsPopupContentInvisibleChanged(DependencyPropertyChangedEventArgs e) {
            base.RaiseIsPopupContentInvisibleChanged(e);
            bool newValue = (bool)e.NewValue;
            if(Ribbon != null)
                Ribbon.AllowKeyTips = !newValue;
        }
    }
    public class ForegroundInfo : DependencyObject {
        public static readonly DependencyProperty HoverForegroundProperty;
        public static readonly DependencyProperty NormalForegroundProperty;

        static ForegroundInfo() {
            HoverForegroundProperty = DependencyPropertyManager.Register("HoverForeground", typeof(SolidColorBrush), typeof(ForegroundInfo), new FrameworkPropertyMetadata(null));
            NormalForegroundProperty = DependencyPropertyManager.Register("NormalForeground", typeof(SolidColorBrush), typeof(ForegroundInfo), new FrameworkPropertyMetadata(null));
        }

        public SolidColorBrush NormalForeground {
            get { return (SolidColorBrush)GetValue(NormalForegroundProperty); }
            set { SetValue(NormalForegroundProperty, value); }
        }
        public SolidColorBrush HoverForeground {
            get { return (SolidColorBrush)GetValue(HoverForegroundProperty); }
            set { SetValue(HoverForegroundProperty, value); }
        }

        public void OnModuleLoaded() {
            ThemeManager.ThemeChanged += new ThemeChangedRoutedEventHandler(OnThemeChanged);

            OnThemeChanged(null, null);
        }
        public void OnModuleUnoaded() {
            ThemeManager.ThemeChanged -= OnThemeChanged;
            OnThemeChanged(null, null);
        }

        void OnThemeChanged(DependencyObject sender, ThemeChangedRoutedEventArgs e) {
            if(IsDarkBackstageBackground()) {
                NormalForeground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.White);
                HoverForeground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Black);
            } else {
                NormalForeground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Black);
                HoverForeground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Black);
            }
        }

        bool IsDarkBackstageBackground() {
            return ThemeManager.ApplicationThemeName == "MetropolisDark";
        }
    }
    public class ForegroundInfoWrapper : System.Windows.Controls.ContentControl {
        public static readonly DependencyProperty ForegroundInfoProperty;
        public static readonly DependencyProperty ActualForegroundProperty;
        static ForegroundInfoWrapper() {
            ForegroundInfoProperty = DependencyPropertyManager.Register("ForegroundInfo", typeof(ForegroundInfo), typeof(ForegroundInfoWrapper), new FrameworkPropertyMetadata(null));
            ActualForegroundProperty = DependencyPropertyManager.Register("ActualForeground", typeof(SolidColorBrush), typeof(ForegroundInfoWrapper), new FrameworkPropertyMetadata(null));
        }
        public ForegroundInfoWrapper() {
            SetBinding(ActualForegroundProperty, new System.Windows.Data.Binding("ForegroundInfo.NormalForeground") { RelativeSource = new System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self) });
            SetBinding(ForegroundProperty, new System.Windows.Data.Binding("ActualForeground") { RelativeSource = new System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self) });
        }

        public SolidColorBrush ActualForeground {
            get { return (SolidColorBrush)GetValue(ActualForegroundProperty); }
            set { SetValue(ActualForegroundProperty, value); }
        }
        public ForegroundInfo ForegroundInfo {
            get { return (ForegroundInfo)GetValue(ForegroundInfoProperty); }
            set { SetValue(ForegroundInfoProperty, value); }
        }

        protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e) {
            base.OnMouseEnter(e);
            SetBinding(ActualForegroundProperty, new System.Windows.Data.Binding("ForegroundInfo.HoverForeground") { RelativeSource = new System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self) });
        }
        protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e) {
            base.OnMouseLeave(e);
            SetBinding(ActualForegroundProperty, new System.Windows.Data.Binding("ForegroundInfo.NormalForeground") { RelativeSource = new System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self) });
        }
        protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e) {
            base.OnMouseMove(e);
            SetBinding(ActualForegroundProperty, new System.Windows.Data.Binding("ForegroundInfo.HoverForeground") { RelativeSource = new System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self) });
        }
    }
}