Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports System
Imports System.Windows
Imports DevExpress.Xpf.Bars
Imports DevExpress.Xpf.Core.Native
Imports DevExpress.Xpf.DemoBase
Imports DevExpress.Xpf.Utils
Imports DevExpress.Xpf.Ribbon
Imports System.Windows.Media
Imports DevExpress.Xpf.Core
Namespace RibbonDemo
Public Class RibbonDemoModule
Inherits DemoModule
Public Shared ReadOnly BarManagerProperty As DependencyProperty
Public Shared ReadOnly RibbonProperty As DependencyProperty
Public Shared ReadOnly ForegroundInfoProperty As DependencyProperty
Shared Sub New()
Dim ownerType As Type = GetType(RibbonDemoModule)
BarManagerProperty = DependencyPropertyManager.Register("BarManager", GetType(BarManager), ownerType, New FrameworkPropertyMetadata(Nothing))
RibbonProperty = DependencyPropertyManager.Register("Ribbon", GetType(RibbonControl), ownerType, New FrameworkPropertyMetadata(Nothing))
ForegroundInfoProperty = DependencyPropertyManager.Register("ForegroundInfo", GetType(ForegroundInfo), ownerType, New FrameworkPropertyMetadata(Nothing))
End Sub
Public Property Manager() As BarManager
Get
Return CType(GetValue(BarManagerProperty), BarManager)
End Get
Set(ByVal value As BarManager)
SetValue(BarManagerProperty, value)
End Set
End Property
Public Property Ribbon() As RibbonControl
Get
Return CType(GetValue(RibbonProperty), RibbonControl)
End Get
Set(ByVal value As RibbonControl)
SetValue(RibbonProperty, value)
End Set
End Property
Public Property ForegroundInfo() As ForegroundInfo
Get
Return CType(GetValue(ForegroundInfoProperty), ForegroundInfo)
End Get
Set(ByVal value As ForegroundInfo)
SetValue(ForegroundInfoProperty, value)
End Set
End Property
Public Sub New()
ForegroundInfo = New RibbonDemo.ForegroundInfo()
AddHandler Loaded, AddressOf OnLoaded
AddHandler Unloaded, AddressOf OnUnloaded
End Sub
Protected Overridable ReadOnly Property NeedChangeEditorsTheme() As Boolean
Get
Return False
End Get
End Property
Protected Overridable Sub OnLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
Manager = CType(DemoModuleControl.FindDemoContent(GetType(BarManager), Me), BarManager)
Ribbon = CType(DemoModuleControl.FindDemoContent(GetType(RibbonControl), Me), RibbonControl)
ForegroundInfo.OnModuleLoaded()
DemoModuleControl.DemoContent = Manager
End Sub
Protected Overridable Sub OnUnloaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
ForegroundInfo.OnModuleUnoaded()
End Sub
Protected Overrides Function CanLeave() As Boolean
Return True
End Function
Protected Overrides Sub RaiseIsPopupContentInvisibleChanged(ByVal e As DependencyPropertyChangedEventArgs)
MyBase.RaiseIsPopupContentInvisibleChanged(e)
Dim newValue As Boolean = CBool(e.NewValue)
If Ribbon IsNot Nothing Then
Ribbon.AllowKeyTips = Not newValue
End If
End Sub
End Class
Public Class ForegroundInfo
Inherits DependencyObject
Public Shared ReadOnly HoverForegroundProperty As DependencyProperty
Public Shared ReadOnly NormalForegroundProperty As DependencyProperty
Shared Sub New()
HoverForegroundProperty = DependencyPropertyManager.Register("HoverForeground", GetType(SolidColorBrush), GetType(ForegroundInfo), New FrameworkPropertyMetadata(Nothing))
NormalForegroundProperty = DependencyPropertyManager.Register("NormalForeground", GetType(SolidColorBrush), GetType(ForegroundInfo), New FrameworkPropertyMetadata(Nothing))
End Sub
Public Property NormalForeground() As SolidColorBrush
Get
Return CType(GetValue(NormalForegroundProperty), SolidColorBrush)
End Get
Set(ByVal value As SolidColorBrush)
SetValue(NormalForegroundProperty, value)
End Set
End Property
Public Property HoverForeground() As SolidColorBrush
Get
Return CType(GetValue(HoverForegroundProperty), SolidColorBrush)
End Get
Set(ByVal value As SolidColorBrush)
SetValue(HoverForegroundProperty, value)
End Set
End Property
Public Sub OnModuleLoaded()
AddHandler ThemeManager.ThemeChanged, AddressOf OnThemeChanged
OnThemeChanged(Nothing, Nothing)
End Sub
Public Sub OnModuleUnoaded()
RemoveHandler ThemeManager.ThemeChanged, AddressOf OnThemeChanged
OnThemeChanged(Nothing, Nothing)
End Sub
Private Sub OnThemeChanged(ByVal sender As DependencyObject, ByVal e As ThemeChangedRoutedEventArgs)
If IsDarkBackstageBackground() Then
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)
End If
End Sub
Private Function IsDarkBackstageBackground() As Boolean
Return ThemeManager.ApplicationThemeName = "MetropolisDark"
End Function
End Class
Public Class ForegroundInfoWrapper
Inherits System.Windows.Controls.ContentControl
Public Shared ReadOnly ForegroundInfoProperty As DependencyProperty
Public Shared ReadOnly ActualForegroundProperty As DependencyProperty
Shared Sub New()
ForegroundInfoProperty = DependencyPropertyManager.Register("ForegroundInfo", GetType(ForegroundInfo), GetType(ForegroundInfoWrapper), New FrameworkPropertyMetadata(Nothing))
ActualForegroundProperty = DependencyPropertyManager.Register("ActualForeground", GetType(SolidColorBrush), GetType(ForegroundInfoWrapper), New FrameworkPropertyMetadata(Nothing))
End Sub
Public Sub New()
SetBinding(ActualForegroundProperty, New System.Windows.Data.Binding("ForegroundInfo.NormalForeground") With {.RelativeSource = New System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self)})
SetBinding(ForegroundProperty, New System.Windows.Data.Binding("ActualForeground") With {.RelativeSource = New System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self)})
End Sub
Public Property ActualForeground() As SolidColorBrush
Get
Return CType(GetValue(ActualForegroundProperty), SolidColorBrush)
End Get
Set(ByVal value As SolidColorBrush)
SetValue(ActualForegroundProperty, value)
End Set
End Property
Public Property ForegroundInfo() As ForegroundInfo
Get
Return CType(GetValue(ForegroundInfoProperty), ForegroundInfo)
End Get
Set(ByVal value As ForegroundInfo)
SetValue(ForegroundInfoProperty, value)
End Set
End Property
Protected Overrides Sub OnMouseEnter(ByVal e As System.Windows.Input.MouseEventArgs)
MyBase.OnMouseEnter(e)
SetBinding(ActualForegroundProperty, New System.Windows.Data.Binding("ForegroundInfo.HoverForeground") With {.RelativeSource = New System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self)})
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As System.Windows.Input.MouseEventArgs)
MyBase.OnMouseLeave(e)
SetBinding(ActualForegroundProperty, New System.Windows.Data.Binding("ForegroundInfo.NormalForeground") With {.RelativeSource = New System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self)})
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Input.MouseEventArgs)
MyBase.OnMouseMove(e)
SetBinding(ActualForegroundProperty, New System.Windows.Data.Binding("ForegroundInfo.HoverForeground") With {.RelativeSource = New System.Windows.Data.RelativeSource(System.Windows.Data.RelativeSourceMode.Self)})
End Sub
End Class
End Namespace