Mini Kabibi Habibi
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) });
}
}
}