Imports System.Windows.Controls
Imports System.Windows
Imports System.Windows.Shapes
Imports System.Windows.Data
Imports System.Windows.Media
Public Module Templates
Friend Function CreateNormalAeroWidowTemplate(titleBarContent As Boolean, magnify As Boolean)
'basicFrameVisibilityBinding
Dim basicFrameVisibilityBinding As New Binding()
basicFrameVisibilityBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
basicFrameVisibilityBinding.Path = New PropertyPath(AeroWindow.BasicFrameVisibilityProperty)
'activeBinding
Dim activeBinding As New Binding()
activeBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
activeBinding.Path = New PropertyPath(Window.IsActiveProperty)
'backgroundBinding
Dim backgroundBinding As Binding = New Binding()
backgroundBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
backgroundBinding.Path = New PropertyPath(AeroWindow.BackgroundProperty)
'contentBinding
Dim contentBinding As Binding = New Binding()
contentBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
contentBinding.Path = New PropertyPath(AeroWindow.ContentProperty)
'iconBinding
Dim iconBinding As New Binding()
iconBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
iconBinding.Path = New PropertyPath(Window.IconProperty)
'textBinding
Dim textBinding = New Binding()
textBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
textBinding.Path = New PropertyPath(Window.TitleProperty)
'closeButtonVisibilityBinding
Dim closeButtonVisibilityBinding As New Binding()
closeButtonVisibilityBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
closeButtonVisibilityBinding.Path = New PropertyPath(AeroWindow.CloseButtonVisibilityProperty)
'maximizeButtonVisibilityBinding
Dim maximizeButtonVisibilityBinding As New Binding()
maximizeButtonVisibilityBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
maximizeButtonVisibilityBinding.Path = New PropertyPath(AeroWindow.MaximizeButtonVisibilityProperty)
'restoreButtonVisibilityBinding
Dim restoreButtonVisibilityBinding As New Binding()
restoreButtonVisibilityBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
restoreButtonVisibilityBinding.Path = New PropertyPath(AeroWindow.RestoreButtonVisibilityProperty)
'minimizeButtonVisibilityBinding
Dim minimizeButtonVisibilityBinding As New Binding()
minimizeButtonVisibilityBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
minimizeButtonVisibilityBinding.Path = New PropertyPath(AeroWindow.MinimizeButtonVisibilityProperty)
'titleBarContentBinding
Dim titleBarContentBinding As New Binding()
titleBarContentBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
titleBarContentBinding.Path = New PropertyPath(AeroWindow.TitleBarContentProperty)
'whiteShadowEffect
Dim whiteShadowEffect As New Effects.DropShadowEffect()
whiteShadowEffect.ShadowDepth = 0
whiteShadowEffect.Color = Colors.White
'lightShadowEffect
Dim lightShadowEffect As New Effects.DropShadowEffect()
lightShadowEffect.ShadowDepth = 1
lightShadowEffect.Opacity = 0.8
'topFrameFactory
Dim topFrameFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
topFrameFactory.SetValue(Grid.ColumnSpanProperty, 3)
topFrameFactory.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.WindowFrameTop)
topFrameFactory.SetBinding(VisualStyleWindowElement.VisibilityProperty, basicFrameVisibilityBinding)
topFrameFactory.SetBinding(VisualStyleWindowElement.IsActiveProperty, activeBinding)
'bottomFrameFactory
Dim bottomFrameFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
bottomFrameFactory.SetValue(Grid.ColumnSpanProperty, 3)
bottomFrameFactory.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.WindowFrameBottom)
bottomFrameFactory.SetValue(Grid.RowProperty, 2)
bottomFrameFactory.SetBinding(VisualStyleWindowElement.VisibilityProperty, basicFrameVisibilityBinding)
bottomFrameFactory.SetBinding(VisualStyleWindowElement.IsActiveProperty, activeBinding)
'leftFrameFactory
Dim leftFrameFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
leftFrameFactory.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.WindowFrameLeft)
leftFrameFactory.SetValue(Grid.RowProperty, 1)
leftFrameFactory.SetValue(Grid.ColumnProperty, 0)
leftFrameFactory.SetBinding(VisualStyleWindowElement.VisibilityProperty, basicFrameVisibilityBinding)
leftFrameFactory.SetBinding(VisualStyleWindowElement.IsActiveProperty, activeBinding)
'rightFrameFactory
Dim rightFrameFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
rightFrameFactory.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.WindowFrameRight)
rightFrameFactory.SetValue(Grid.RowProperty, 1)
rightFrameFactory.SetValue(Grid.ColumnProperty, 2)
rightFrameFactory.SetBinding(VisualStyleWindowElement.VisibilityProperty, basicFrameVisibilityBinding)
rightFrameFactory.SetBinding(VisualStyleWindowElement.IsActiveProperty, activeBinding)
'contentFactory
Dim contentFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(ContentPresenter))
contentFactory.SetValue(Grid.RowProperty, 2)
contentFactory.SetValue(Grid.ColumnProperty, 1)
contentFactory.SetBinding(ContentPresenter.ContentProperty, contentBinding)
'captionButtonHoverTrigger
Dim captionButtonHoverTrigger As New Trigger()
captionButtonHoverTrigger.Property = Button.IsMouseOverProperty
captionButtonHoverTrigger.Value = True
captionButtonHoverTrigger.Setters.Add(New Setter(VisualStyleWindowElement.VisualStateProperty, ButtonVisualState.Hot, "VisualStylePiece"))
'captionButtonPressTrigger
Dim captionButtonPressTrigger As New Trigger()
captionButtonPressTrigger.Property = Button.IsPressedProperty
captionButtonPressTrigger.Value = True
captionButtonPressTrigger.Setters.Add(New Setter(VisualStyleWindowElement.VisualStateProperty, ButtonVisualState.Pressed, "VisualStylePiece"))
'captionButtonEnabledBinding
Dim captionButtonEnabledBinding As New Binding()
captionButtonEnabledBinding.RelativeSource = New RelativeSource(RelativeSourceMode.TemplatedParent)
captionButtonEnabledBinding.Path = New PropertyPath(Button.IsEnabledProperty)
'closeButtonTemplate
Dim closeButtonTemplate As New ControlTemplate(GetType(Button))
closeButtonTemplate.VisualTree = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
closeButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.CloseButton)
closeButtonTemplate.VisualTree.Name = "VisualStylePiece"
closeButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.MarginProperty, New Thickness(2))
closeButtonTemplate.Triggers.Add(captionButtonHoverTrigger)
closeButtonTemplate.Triggers.Add(captionButtonPressTrigger)
closeButtonTemplate.VisualTree.SetBinding(VisualStyleWindowElement.IsActiveProperty, captionButtonEnabledBinding)
'maximizeButtonTemplate
Dim maximizeButtonTemplate As New ControlTemplate(GetType(Button))
maximizeButtonTemplate.VisualTree = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
maximizeButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.MaximizeButton)
maximizeButtonTemplate.VisualTree.Name = "VisualStylePiece"
maximizeButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.MarginProperty, New Thickness(2))
maximizeButtonTemplate.Triggers.Add(captionButtonHoverTrigger)
maximizeButtonTemplate.Triggers.Add(captionButtonPressTrigger)
maximizeButtonTemplate.VisualTree.SetBinding(VisualStyleWindowElement.IsActiveProperty, captionButtonEnabledBinding)
'restoreButtonTemplate
Dim restoreButtonTemplate As New ControlTemplate(GetType(Button))
restoreButtonTemplate.VisualTree = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
restoreButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.RestoreButton)
restoreButtonTemplate.VisualTree.Name = "VisualStylePiece"
restoreButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.MarginProperty, New Thickness(2))
restoreButtonTemplate.Triggers.Add(captionButtonHoverTrigger)
restoreButtonTemplate.Triggers.Add(captionButtonPressTrigger)
restoreButtonTemplate.VisualTree.SetBinding(VisualStyleWindowElement.IsActiveProperty, captionButtonEnabledBinding)
'minimizeButtonTemplate
Dim minimizeButtonTemplate As New ControlTemplate(GetType(Button))
minimizeButtonTemplate.VisualTree = New FrameworkElementFactory(GetType(VisualStyleWindowElement))
minimizeButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.ElementProperty, VisualStylePiece.MinimizeButton)
minimizeButtonTemplate.VisualTree.Name = "VisualStylePiece"
minimizeButtonTemplate.VisualTree.SetValue(VisualStyleWindowElement.MarginProperty, New Thickness(2))
minimizeButtonTemplate.Triggers.Add(captionButtonHoverTrigger)
minimizeButtonTemplate.Triggers.Add(captionButtonPressTrigger)
minimizeButtonTemplate.VisualTree.SetBinding(VisualStyleWindowElement.IsActiveProperty, captionButtonEnabledBinding)
'closeButtonFactory
Dim closeButtonFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Button))
closeButtonFactory.SetResourceReference(Button.WidthProperty, SystemParameters.WindowCaptionButtonWidthKey)
closeButtonFactory.SetResourceReference(Button.HeightProperty, SystemParameters.WindowCaptionButtonHeightKey)
closeButtonFactory.SetValue(Button.MarginProperty, New Thickness(-1, -1, -1, 1))
closeButtonFactory.SetValue(DockPanel.DockProperty, Dock.Right)
closeButtonFactory.SetValue(Shell.WindowChrome.IsHitTestVisibleInChromeProperty, True)
closeButtonFactory.SetValue(Button.CommandProperty, SystemCommands.CloseWindowCommand)
closeButtonFactory.SetValue(Button.TemplateProperty, closeButtonTemplate)
closeButtonFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top)
closeButtonFactory.SetBinding(Button.VisibilityProperty, closeButtonVisibilityBinding)
'maximizeButtonFactory
Dim maximizeButtonFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Button))
maximizeButtonFactory.SetResourceReference(Button.WidthProperty, SystemParameters.WindowCaptionButtonWidthKey)
maximizeButtonFactory.SetResourceReference(Button.HeightProperty, SystemParameters.WindowCaptionButtonHeightKey)
maximizeButtonFactory.SetValue(Button.MarginProperty, New Thickness(-1, -1, -1, 1))
maximizeButtonFactory.SetValue(DockPanel.DockProperty, Dock.Right)
maximizeButtonFactory.SetValue(Shell.WindowChrome.IsHitTestVisibleInChromeProperty, True)
maximizeButtonFactory.SetValue(Button.CommandProperty, SystemCommands.MaximizeWindowCommand)
maximizeButtonFactory.SetValue(Button.TemplateProperty, maximizeButtonTemplate)
maximizeButtonFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top)
maximizeButtonFactory.SetBinding(Button.VisibilityProperty, maximizeButtonVisibilityBinding)
'restoreButtonFactory
Dim restoreButtonFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Button))
restoreButtonFactory.SetResourceReference(Button.WidthProperty, SystemParameters.WindowCaptionButtonWidthKey)
restoreButtonFactory.SetResourceReference(Button.HeightProperty, SystemParameters.WindowCaptionButtonHeightKey)
restoreButtonFactory.SetValue(Button.MarginProperty, New Thickness(-1, -1, -1, 1))
restoreButtonFactory.SetValue(DockPanel.DockProperty, Dock.Right)
restoreButtonFactory.SetValue(Shell.WindowChrome.IsHitTestVisibleInChromeProperty, True)
restoreButtonFactory.SetValue(Button.CommandProperty, SystemCommands.RestoreWindowCommand)
restoreButtonFactory.SetValue(Button.TemplateProperty, restoreButtonTemplate)
restoreButtonFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top)
restoreButtonFactory.SetBinding(Button.VisibilityProperty, restoreButtonVisibilityBinding)
'MinimizeButtonFactory
Dim minimizeButtonFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Button))
minimizeButtonFactory.SetResourceReference(Button.WidthProperty, SystemParameters.WindowCaptionButtonWidthKey)
minimizeButtonFactory.SetResourceReference(Button.HeightProperty, SystemParameters.WindowCaptionButtonHeightKey)
minimizeButtonFactory.SetValue(Button.MarginProperty, New Thickness(-1, -1, -1, 1))
minimizeButtonFactory.SetValue(DockPanel.DockProperty, Dock.Right)
minimizeButtonFactory.SetValue(Shell.WindowChrome.IsHitTestVisibleInChromeProperty, True)
minimizeButtonFactory.SetValue(Button.CommandProperty, SystemCommands.MinimizeWindowCommand)
minimizeButtonFactory.SetValue(Button.TemplateProperty, minimizeButtonTemplate)
minimizeButtonFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top)
minimizeButtonFactory.SetBinding(Button.VisibilityProperty, minimizeButtonVisibilityBinding)
'titleTextFactory
Dim titleTextFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(TextBlock))
titleTextFactory.SetValue(Button.VerticalAlignmentProperty, VerticalAlignment.Center)
titleTextFactory.SetBinding(TextBlock.TextProperty, textBinding)
titleTextFactory.SetValue(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Center)
titleTextFactory.SetValue(TextBlock.EffectProperty, whiteShadowEffect)
titleTextFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top)
'iconImageFactory
Dim iconImageFactory As New FrameworkElementFactory(GetType(Image))
iconImageFactory.SetValue(Image.WidthProperty, 16.0)
iconImageFactory.SetValue(Image.HeightProperty, 16.0)
iconImageFactory.SetBinding(Image.SourceProperty, iconBinding)
'iconButtonTemplate
Dim iconButtonTemplate As New ControlTemplate(GetType(Button))
iconButtonTemplate.VisualTree = New FrameworkElementFactory(GetType(ContentPresenter))
'iconButtonFactory
Dim iconButtonFactory As New FrameworkElementFactory(GetType(Button))
iconButtonFactory.SetValue(DockPanel.DockProperty, Dock.Left)
iconButtonFactory.SetValue(Image.VerticalAlignmentProperty, VerticalAlignment.Center)
iconButtonFactory.SetValue(Shell.WindowChrome.IsHitTestVisibleInChromeProperty, True)
iconButtonFactory.SetValue(Image.WidthProperty, 16.0)
iconButtonFactory.SetValue(Image.HeightProperty, 16.0)
iconButtonFactory.SetValue(Button.ClickModeProperty, ClickMode.Press)
iconButtonFactory.SetValue(Button.TemplateProperty, iconButtonTemplate)
iconButtonFactory.SetValue(Button.CommandProperty, SystemCommands.ShowSystemMenuCommand)
iconButtonFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top)
iconButtonFactory.AppendChild(iconImageFactory)
'titleBarContentFactory
Dim titleBarContentFactory As New FrameworkElementFactory(GetType(ContentControl))
titleBarContentFactory.SetBinding(ContentControl.ContentProperty, titleBarContentBinding)
titleBarContentFactory.SetValue(Shell.WindowChrome.IsHitTestVisibleInChromeProperty, True)
titleBarContentFactory.SetValue(ContentControl.ClipToBoundsProperty, False)
'titleBarDockPanelFactory
Dim titleBarDockPanelFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(DockPanel))
titleBarDockPanelFactory.SetValue(Grid.ColumnProperty, 1)
titleBarDockPanelFactory.SetValue(Grid.RowProperty, 1)
titleBarDockPanelFactory.SetValue(Grid.RowSpanProperty, 2)
titleBarDockPanelFactory.SetValue(DockPanel.ClipToBoundsProperty, False)
titleBarDockPanelFactory.SetValue(DockPanel.MarginProperty, New Thickness(1, 1, 1, 1))
titleBarDockPanelFactory.AppendChild(closeButtonFactory)
titleBarDockPanelFactory.AppendChild(maximizeButtonFactory)
titleBarDockPanelFactory.AppendChild(restoreButtonFactory)
titleBarDockPanelFactory.AppendChild(minimizeButtonFactory)
If titleBarContent Then
titleBarDockPanelFactory.AppendChild(titleBarContentFactory)
Else
titleBarDockPanelFactory.AppendChild(iconButtonFactory)
titleBarDockPanelFactory.AppendChild(titleTextFactory)
End If
'contentGridFactory
Dim contentGridFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Grid))
contentGridFactory.Name = "PART_ContentGrid"
contentGridFactory.SetValue(Grid.ClipToBoundsProperty, False)
contentGridFactory.SetValue(Grid.RowSpanProperty, 4)
contentGridFactory.SetValue(Grid.ColumnSpanProperty, 3)
contentGridFactory.SetValue(Grid.ClipToBoundsProperty, False)
contentGridFactory.AppendChild(contentFactory)
contentGridFactory.AppendChild(titleBarDockPanelFactory)
'backgroundFactory
Dim backgroundFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Rectangle))
backgroundFactory.SetValue(Grid.RowProperty, 1)
backgroundFactory.SetValue(Grid.ColumnProperty, 1)
backgroundFactory.SetBinding(Rectangle.FillProperty, backgroundBinding)
'magnifierSurfaceFactory
Dim magnifierSurfaceFactory = New FrameworkElementFactory(GetType(Rectangle))
magnifierSurfaceFactory.Name = "PART_MagnifierSurface"
'magnifierBorderFactory
Dim magnifierBorderFactory As New FrameworkElementFactory(GetType(Border))
magnifierBorderFactory.SetValue(Border.BackgroundProperty, Brushes.White)
magnifierBorderFactory.SetValue(Border.ClipToBoundsProperty, True)
magnifierBorderFactory.SetValue(Border.CornerRadiusProperty, New CornerRadius(6))
magnifierBorderFactory.SetValue(Border.BorderBrushProperty, SystemParameters.WindowGlassBrush)
magnifierBorderFactory.SetValue(Border.BorderThicknessProperty, New Thickness(3))
magnifierBorderFactory.AppendChild(magnifierSurfaceFactory)
'magnifierBorderBorderFactory
Dim magnifierBorderBorderFactory As New FrameworkElementFactory(GetType(Border))
magnifierBorderBorderFactory.SetValue(Border.BackgroundProperty, Brushes.Transparent)
magnifierBorderBorderFactory.SetValue(Border.ClipToBoundsProperty, True)
magnifierBorderBorderFactory.SetValue(Border.CornerRadiusProperty, New CornerRadius(8))
magnifierBorderBorderFactory.SetValue(Border.BorderThicknessProperty, New Thickness(1))
magnifierBorderBorderFactory.SetValue(Border.BorderBrushProperty, Brushes.Black)
magnifierBorderBorderFactory.AppendChild(magnifierBorderFactory)
'magnifierContainerFactory
Dim magnifierContainerFactory = New FrameworkElementFactory(GetType(ContentControl))
magnifierContainerFactory.Name = "PART_MagnifierContainer"
magnifierContainerFactory.SetValue(ContentControl.BackgroundProperty, Brushes.White)
'magnifierContainerFactory.SetValue(Control.EffectProperty, lightShadowEffect)
magnifierContainerFactory.AppendChild(magnifierBorderBorderFactory)
'chromeGridFactory
Dim chromeGridFactory As FrameworkElementFactory = New FrameworkElementFactory(GetType(Grid))
chromeGridFactory.SetBinding(Rectangle.FillProperty, backgroundBinding)
chromeGridFactory.Name = "PART_ChromeGrid"
chromeGridFactory.AppendChild(backgroundFactory)
chromeGridFactory.AppendChild(leftFrameFactory)
chromeGridFactory.AppendChild(topFrameFactory)
chromeGridFactory.AppendChild(rightFrameFactory)
chromeGridFactory.AppendChild(bottomFrameFactory)
chromeGridFactory.AppendChild(contentGridFactory)
If magnify Then
chromeGridFactory.AppendChild(magnifierContainerFactory)
End If
'template
Dim template As ControlTemplate = New ControlTemplate()
template.VisualTree = chromeGridFactory
Return template
End Function
Public ReadOnly Property AeroWindowNormalTemplate As ControlTemplate
Get
Return CreateNormalAeroWidowTemplate(False, False)
End Get
End Property
Public ReadOnly Property AeroWindowTitleBarContentTemplate As ControlTemplate
Get
Return CreateNormalAeroWidowTemplate(True, False)
End Get
End Property
Public ReadOnly Property MagnifyWindowNormalTemplate As ControlTemplate
Get
Return CreateNormalAeroWidowTemplate(False, True)
End Get
End Property
Public ReadOnly Property MagnifyWindowTitleBarContentTemplate As ControlTemplate
Get
Return CreateNormalAeroWidowTemplate(True, True)
End Get
End Property
End Module